Apache-2.2

我的 htaccess mod_rewrite 的 nginx 等效項是什麼?

  • March 4, 2012

以前我在我的 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 文件中指定的任何內容相匹配)。

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