RewriteRule ^(。*)/ $?path = $ 1 [QSA,L]在我的.htaccess中意味着什么?

时间:2013-11-28 07:55:58

标签: regex .htaccess mod-rewrite nginx rewrite

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

DirectoryIndex index.php

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

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:7)

RewriteCond % !-f似乎不正确的规则条件,并且始终评估为true。

这条规则:

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

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

因此,对于ex: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]

答案 1 :(得分:1)

这意味着如果请求不是文件,则在尾随/之前重写所有内容到index.php?path=后跟之前匹配的内容。

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