Nginx

Joomla URL 重寫在 Nginx 中自動工作

  • July 5, 2018

這讓我發瘋,我不明白這是如何自動工作的。我有 nginx 作為我的網路伺服器,我已經安裝了具有 URL 重寫的 Joomla,它index.php從 URL 中刪除了。以前,當我使用 Apache 時,我必須啟用 .htaccessRewriteEngine On才能使其正常工作。但是對於 Nginx,當我啟用“使用 URL 重寫”時,它會自動工作。我只使用將 php 文件傳遞給 php-fpm 的 Nginx。就這樣。除了 Joomla 文件中給出的內容之外,我沒有添加任何特殊的重寫規則。我不明白“使用 URL 重寫”是如何在我啟用它時自動工作的,因為 Nginx 沒有 .htaccess。

關於這個主題的Joomla 文件也沒有幫助。在第二步它說

啟用使用 Apache mod_rewrite/URL 重寫選項並保存:此選項使用 Apache mod_rewrite 函式來消除 URL 的“index.php”部分。

…..

如果此選項導致錯誤,請參閱如何檢查您的伺服器上是否啟用了 mod rewrite。如果它未啟用並且您可以訪問文件 apache/conf/httpd.conf,請打開該文件並檢查 LoadModule rewrite_module modules/mod_rewrite.so 行是否未註釋。如有必要,取消註釋該行並重新啟動 Apache Web 伺服器。

不知道為什麼在 Nginx 配置中添加它,因為 Nginx 中沒有 mod_rewrite。Joomla 後端的 URL 重寫是這樣說的:

使用 URL 重寫 選擇使用伺服器的重寫引擎來擷取滿足特定條件的 URL 並按照指示重寫它們。適用於 IIS 7 和 Apache。僅限 Apache 使用者!啟動前將 htaccess.txt 重命名為 .htaccess。將 web.config.txt 重命名為 web.config 並在啟動前安裝 IIS URL Rewrite Module。

它沒有說明 Nginx,但它仍然有效。我在這裡撓頭。有人可以告訴我 Joomla 的 index.php 是如何在 Nginx 中如此輕鬆地刪除的嗎?這是我的 Nginx Vhost 配置:

server {

       listen 80;
       server_name example.com;
       root /var/www/example/public_html;
       index  index.php index.html index.htm default.html default.htm;

       access_log /var/log/nginx/accn_access.log;
       error_log /var/log/nginx/accn_error.log;

       ##
       # JOOMLA SEF
       ##

       location / {
             try_files   $uri $uri/ /index.php?q=$request_uri;
       }

       ##
       # PHP scripts to FastCGI 
       ##
       location ~ \.php$ {
           try_files $uri =404;
           fastcgi_split_path_info ^(.+\.php)(/.+)$;

           fastcgi_pass   unix:/var/run/php5-fpm.sock;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;

       }

}

看..它是一個非常簡單的配置。魔法發生在哪裡?

魔法發生在這裡:

try_files $uri $uri/ /index.php?q=$request_uri;

這意味著 nginx 首先檢查文件系統上是否存在請求的文件或目錄。如果文件不存在,它會將請求傳遞給 Joomla,並將原始 URI 傳遞給q參數。

引用自:https://serverfault.com/questions/643346