RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是啥意思?
Posted
技术标签:
【中文标题】RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是啥意思?【英文标题】: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
我怀疑这是不正确的,但它可以工作并且可以工作很长时间。我刚刚开始了解当前的配置并进行更正。
【参考方案1】:
这意味着如果请求不是针对文件,则将结尾/
之前的所有内容重写为index.php?path=
,然后是之前匹配的内容。
它应该是最后一条规则 (L
),它应该附加查询字符串 (QSA
),而不是因为替换的查询字符串而丢弃它。
【讨论】:
非常感谢 Alex 的回答。【参考方案2】:RewriteCond % !-f
似乎不正确的规则条件,并且总是评估为真。
这条规则:
RewriteRule ^(.*)/$ ?path=$1 [QSA,L]
是否匹配任何带有斜杠的 URI 并在内部重写为 /?path=uri-without-slash
例如:URI /foo/
将被重写为 /?path=foo
参考: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 会损害安全性吗? 这种不正确的情况有时可能会给您带来意想不到的结果。我建议根据我上面编辑的回复进行更改。以上是关于RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
5.5版本以上”No input file specified“问题解决
5.5版本以上”No input file specified“问题解决
RewriteRule ^(.*)$ 和 RewriteRule (.*)$ 之间的区别