【问题标题】:How to do like apache QSA flag with nginx when you use try_files?使用 try_files 时如何使用 nginx 处理 apache QSA 标志?
【发布时间】:2014-10-22 09:00:18
【问题描述】:

我想将一些 apache 规则转换为 nginx 规则,我是 nginx 新手...

于是我搜了又搜;但没有找到我想做的事。这是我想在 Nginx 中转换的行:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule (.*) index.php?page=$1 [NC,L,QSA]

这是我尝试过的:

location ~ ^/(?<page>[^\/]+)$ {
   try_files $uri /index.php?page=$page;
}
location ~ ^/(?<page>[^\/]+)?(?<qsa>[.*]+)$ {
   try_files $uri /index.php?page=$page&$qsa;
}

这不是工作。我做错了什么?

编辑

太长了,所以我用 PHP 处理它,但我仍然希望得到这个答案,我会很慷慨任何人都会很好地回答这个问题!

【问题讨论】:

  • @Sumurai8 我看到了,但我不介意如何让它与 try_files 一起工作
  • 遗憾的是,我对 nginx 并不了解,也没有真正的 nginx 服务器来测试:-|我希望你能得到你的答案;-)
  • 我也希望,thx :) (如果你想启动自己到 nginx,你可以在 ubuntu 下做一个双启动,apt-get nginx ;))

标签: apache .htaccess mod-rewrite nginx rewrite


【解决方案1】:

Apache QSA 标志是 query-string-append,在 Nginx 世界中查询字符串存储在 $args

所以使用 try_files 类似的东西应该可以工作:

location ~ ^/(?<page>[^\/]+)$ {
   try_files $uri /index.php?page=$page&$args;
}

现在我不明白你在“正则表达式”位置所做的所有事情,(我是一个软弱的人,当我阅读正则表达式时,我总是觉得自己像六岁的孩子在努力读他们的第一句话)。

使用类似的东西

location ~ ^/(.*) {
    try_files $uri/ $uri /index.php?page=$1&$args;
}

应该已经管理目录测试($uri/ 测试检查目录访问),真正的文件直接访问($uri),然后使用给定的 url 作为页面参数回退到 index.php。

您当前的第一个 apache 规则是:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

它检查直接目录访问 (-d)、直接文件访问 (-f)、符号链接 (@987654329 @) 或 使用-s 直接访问大小大于 0 的文件,最后一个是 -f 的子集,所以我不确定你是否需要它。 p>

所以我们唯一需要处理的是符号链接直接访问。这是由 nginx 中的配置选项管理的

disable_symlinks off;

对于NC标签,不区分大小写的模式比较,用/*之类的东西应该没有问题,模式中没有字符。

【讨论】:

  • 非常感谢!为了解释正则表达式 mmhhh,我会说我正在将 URI 从 / 解析为 /,因为我在我的 PHP 脚本中使用它:)
  • 刚刚编辑过!这是个好方法,但您忘记了$page$args 之间的&amp;
  • 添加了您对答案的修复,最好使用&amp;,您是对的。
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2015-04-23
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多