2
为了方便起见,我设置了多个域或通配符支持的nginx,而不是设置50多个不同的站点 - 可用/ *文件。希望这足以向你展示我想要做的事情。有些是静态网站,有些是通常WordPress的安装动态。nginx多域虚拟主机配置
如果index.php存在,一切都按预期工作。
如果请求的文件不存在(missing.html),则由于重写而给出500错误。记录的错误是:
* 112重写或内部重定向循环在处理“/index.php/index.php/index.php/index.php/index.php/index.php/index.php/的index.php/index.php文件/ index.php文件/ index.php文件/ missing.html”
我目前使用的基本nginx的配置是:
`
listen 80 default;
server _;
...
location/{
root /var/www/$host;
if (-f $request_filename) {
expires max;
break;
}
# problem, what if index.php does not exist?
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
}
...
`
如果一个index.php不存在,并且该文件也不存在,我希望它错误404。目前,nginx不支持多个条件如果是嵌套的,如果是这样,我需要一个解决方法。
您是否在重写中尝试过“break”而不是“last”? – rzab 2010-05-22 19:51:46
不,但是我现在能够使用try_files而不是if/rewrite条件来使其工作。 'try_files $ uri $ uri//index.php$uri @ 404;'如果index.php不存在,它将转到位置@ 404 – Poe 2010-05-23 14:39:49
'try_files'是围绕这些问题的建议方法,因为'if'行为不太好,不鼓励使用。您可以直接在'try_files'中指定返回状态,而不是指定的位置:'try_files $ uri $ uri//index.php$uri = 404;' – 2010-05-23 15:17:44