我正在努力在nginx上创建一个简单的重写URL 我的配置如下所示:
location /foo/bar {
rewrite ^/(.+)$ /index.php?p=$1 break;
}
E.g。 /foo/bar/baz
应该成为/foo/bar/index.php?p=baz
(当然在内部)
但是,通过/foo/bar/
访问的所有内容都会触发位于根目录下的index.php的下载。我如何让它工作?
我也尝试使用try_files
,但无法弄清楚如何从/foo/bar/
排除$uri
路径。
答案 0 :(得分:10)
更改
rewrite ^/(.+)$ /index.php?p=$1 break;
到
rewrite ^/(.+)$ /index.php?p=$1 last;
基于http://wiki.nginx.org/HttpRewriteModule#rewrite,
last - 完成当前重写指令的处理并重新启动该过程(包括重写),并搜索所有可用位置的URI匹配。
[编辑]使用break将保留在同一位置块内。在您的情况下,该位置块内没有其他规则。因此,默认情况下,nginx会将其作为文件请求提供。
答案 1 :(得分:0)
不会将PHP文件解释为常规文件。您需要设置一个像FPM这样的CGI服务器,并将连接传递给这些进程。
有关详细信息,请参阅http://wiki.nginx.org/Configuration
<强>更新强>
我不确定为什么你的例子会中断。但我猜您需要将rewrite
更改为try_files
。
location /foo/bar {
try_files $uri $uri/ /index.php?p=$uri;
}