Apache-2.2
我的 htaccess mod_rewrite 的 nginx 等效項是什麼?
以前我在我的 CodeIgniter 網站上使用執行 Apache 的 linode VPS。今天我安裝了 nginx,我的網站登陸頁面即將到來,但使用 htaccess 重寫 URL 的其他頁面沒有到來。這是我的htaccess,
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1
我的 htaccess 的 nginx 等價物是什麼?我還需要在我的 codeigniter 配置和應用程序中進行任何更改嗎??..
對於 codeigniter 配置中的 URI 協議,我正在使用,
$config['uri_protocol'] = 'PATH_INFO';
這可以與nginx一起使用嗎? ..
由於沒有等效的 .htaccess 文件(即沒有目錄級別的配置文件),您需要更新主配置並重新載入 nginx 以使任何更改生效。
上面的 Apache 配置本質上是“如果提供的路徑不是現有文件或目錄,則重定向到 index.php,附加路徑”。
在 Nginx 中,您將使用該
try_files
指令來完成同樣的事情:location / { try_files $uri $uri/ @ci_index; } location @ci_index{ rewrite ^(.*) /index.php?$1 last; }
與 Apache 不同 -在 Nginx 配置中最好避免使用 if 語句。
在某些設置中,您可能能夠避免命名索引並重寫,並簡單地
/index.php
用作第三個路徑try_files
(並且 codeigniter 應該從$_SERVER[$config['uri_protocol']]
.至於 PATH_INFO 的使用 - 檢查您的 fastcgi_params 文件(您希望將其包含在您的 php 位置塊中)並查看:
fastcgi_param PATH_INFO $fastcgi_path_info;
您也許還可以使用
$config['uri_protocol'] = "REQUEST_URI"
對於您選擇的任何選項,檢查輸出
print_r($_SERVER)
以驗證已設置哪些伺服器變數,以及它們已設置為什麼(它們應該與您在 PHP 位置塊和 fastcgi_params 文件中指定的任何內容相匹配)。