nginx 与我的 htaccess mod_rewrite 有何关系?

nginx 与我的 htaccess mod_rewrite 有何关系?

之前我使用运行 Apache 的 linode VPS 来管理我的 CodeIgniter 网站。今天我安装了 nginx,我的网站登录页面可以访问,但使用 htaccess 重写 URL 的其他页面却无法访问。这是我的 htaccess,

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1

nginx 与我的 htaccess 的对应关系是什么?另外,我需要在 codeigniter 配置和应用程序中进行任何更改吗?...

对于 codeigniter 配置中的 URI 协议,我使用,

$config['uri_protocol'] = 'PATH_INFO';

这会与 nginx 一起工作吗?

答案1

由于没有与 .htaccess 文件等效的文件(即没有目录级配置文件),您需要更新主配置并重新加载 nginx 以使任何更改生效。

上述 Apache 配置本质上是“如果提供的路径不是现有文件或目录,则重定向到 index.php,并附加路径”。

在 Nginx 中,您将使用try_files指令来完成同样的事情:

location / {
        try_files $uri $uri/ @ci_index;
}

location @ci_index{
        rewrite ^(.*) /index.php?$1 last;
}

与 Apache 不同 - if 语句最好避免在 Nginx 配置中。

在某些设置中,您可能能够避免命名索引和重写,而简单地用作/index.php第 3 条路径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 文件中指定的内容相匹配)。

相关内容