将 Nginx 重写从“if”转换为“try_files”
Posted
技术标签:
【中文标题】将 Nginx 重写从“if”转换为“try_files”【英文标题】:Convert Nginx rewrite from "if" to "try_files" 【发布时间】:2013-11-29 11:11:21 【问题描述】:我有以下 nginx 重写规则,它非常适合安装在子文件夹中的 php 脚本:
location /subfolder/
if (!-e $request_filename)
rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
但是 Nginx wiki 说使用“if”是邪恶的 http://wiki.nginx.org/IfIsEvil 所以我尝试了以下
location /subfolder/
try_files $uri $uri/ /subfolder/index.php?$args;
但它不能替换上面的那个,尽管它适用于 WordPress 和大多数 PHP 脚本。如果有办法将其翻译为使用“try_files”?
谢谢!
【问题讨论】:
【参考方案1】:您只想在文件不存在时进行重写,将其用作try_files
中回退的命名位置
location /subfolder
try_files $uri $uri/ @rewrite;
location @rewrite
rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
【讨论】:
这不起作用,Nginx 不会以以下错误消息开始:[emerg] unknown directive "$uri" in /etc/nginx/nginx.conf:2252 它指的是以下行:$uri $uri/ @rewrite; 添加 try_files 也没有帮助:try_files $uri $uri/ @rewrite;它会生成以下错误:/etc/nginx/nginx.conf:2254 中的未知指令“@rewrite” 你有什么 nginx 版本?是的,我忘了写try_files
我的Nginx版本是1.0.10以上是关于将 Nginx 重写从“if”转换为“try_files”的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 nginx Web 服务器的重写规则中将大写字母转换为小写字母?