【问题标题】:What does RewriteRule ^(.*)/$ ?path=$1 [QSA,L] mean in my .htaccess?RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是什么意思?
【发布时间】:2013-12-14 03:55:20
【问题描述】:

我需要在 nginx 中创建重写,就像在我的 .htaccess 中所做的那样,有些行我不完全理解。

DirectoryIndex index.php

RewriteEngine on
RewriteCond % !-f
RewriteRule ^(.*)/$ ?path=$1  [QSA,L]

谁能给我解释一下?

【问题讨论】:

  • 这是不正确的:RewriteCond % !-f
  • 我怀疑这是不正确的,但它可以工作并且可以工作很长时间。我刚刚开始了解当前的配置并进行更正。

标签: regex .htaccess mod-rewrite nginx rewrite


【解决方案1】:

这意味着如果请求不是针对文件,则将结尾/ 之前的所有内容重写为index.php?path=,然后是之前匹配的内容。

它应该是最后一条规则 (L),它应该附加查询字符串 (QSA),而不是因为替换的查询字符串而丢弃它。

【讨论】:

  • 非常感谢 Alex 的回答。
【解决方案2】:

RewriteCond % !-f 似乎不正确的规则条件,并且总是评估为真。

这条规则:

RewriteRule ^(.*)/$ ?path=$1  [QSA,L]

是否匹配任何带有斜杠的 URI 并在内部重写为 /?path=uri-without-slash

例如:URI /foo/ 将被重写为 /?path=foo

  • QSA - 查询字符串追加
  • L = 最后一条规则

参考:Apache mod_rewrite Introduction

更新:将不正确的条件更改为:

# request is not for a file
RewriteCond %{REQUEST_FILENAME} !-f
# request is not for a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ ?path=$1 [QSA,L]

【讨论】:

  • 非常感谢阿努巴瓦。很抱歉,不能对你的名声+。还有一个问题 - 不正确的 RewriteCond 会损害安全性吗?
  • 这种不正确的情况有时可能会给您带来意想不到的结果。我建议根据我上面编辑的回复进行更改。
猜你喜欢
  • 2012-09-15
  • 2021-02-03
  • 2013-05-04
  • 1970-01-01
  • 2013-05-21
  • 2011-06-09
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多