.htaccess - 将 Nginx 重写从 "if"转换为 "try_files"

标签 .htaccess nginx rewrite

我有以下 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”?

谢谢!

最佳答案

您只想在文件不存在时进行重写,将其用作 try_files 中回退的命名位置

location /subfolder {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
}

关于.htaccess - 将 Nginx 重写从 "if"转换为 "try_files",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20011583/

相关文章:

php - 如何实现像 www.example.com/username 这样的 url 以重定向到 www.example.com/user/profile.php?uid=10?

apache - .htaccess 条件 RewriteBase

SSL:证书与名称不匹配 (Cloudflare)

apache - .htaccess 从 root( public_html ) 重定向到子目录并拒绝直接访问 root

regex - htaccess 目标特定文件

nginx-重复的默认服务器错误

linux - NGINX 不显示 Amazon EC2 实例上的默认页面

regex - 当包含 '?' 时,如何在 Charles Proxy 中设置重写规则?

Php - 在 rewriteRule 中允许空格

class - Magento 重复类重写