Joomla URL 重寫在 Nginx 中自動工作
這讓我發瘋,我不明白這是如何自動工作的。我有 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
參數。