我需要像在我的.htaccess中那样在nginx中创build重写,并且有一些我不完全理解的行。
DirectoryIndex index.php RewriteEngine on RewriteCond % !-f RewriteRule ^(.*)/$ ?path=$1 [QSA,L]
有人可以向我解释吗?
RewriteCond % !-f
似乎是不正确的规则条件,并始终评估为true。
这条规则:
RewriteRule ^(.*)/$ ?path=$1 [QSA,L]
将任何URI与尾部斜杠匹配,并在内部重写为/?path=uri-without-slash
因此,例如:一个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]
这意味着如果请求不是文件,那么重写所有的内容,然后在/
index.php?path=
之前重写所有内容。
它应该是最后一个规则( L
),它应该附加查询字符串( QSA
),而不是由于替换的查询字符串而丢弃它。