之前我使用运行 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 文件中指定的内容相匹配)。