我需要像在我的.htaccess中那样在nginx中创建重写,并且有一些我不完全理解的行。
DirectoryIndex index.php
RewriteEngine on
RewriteCond % !-f
RewriteRule ^(.*)/$ ?path=$1 [QSA,L]
有人可以向我解释一下吗?
答案 0 :(得分:7)
RewriteCond % !-f
似乎不正确的规则条件,并且始终评估为true。
这条规则:
RewriteRule ^(.*)/$ ?path=$1 [QSA,L]
匹配任何带尾随斜杠的URI 并在内部重写为/?path=uri-without-slash
因此,对于ex:URI /foo/
将被重写为/?path=foo
更新:将错误的条件更改为:
# 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
),而不是因为替换的查询字符串而丢弃它。