RewriteRule ^(。*)/ $?path = $ 1 是什么意思在我的.htaccess?

我需要像在我的.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

  • QSA – 查询字符串追加
  • L =最后的规则

参考: Apache mod_rewrite介绍

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

 # 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 ),而不是由于替换的查询字符串而丢弃它。