Regex htaccess[L]标志没有';行不通
我在xampps的htdocs中的searchEngine文件夹中有这样的.htaccess文件Regex htaccess[L]标志没有';行不通,regex,apache,.htaccess,Regex,Apache,.htaccess,我在xampps的htdocs中的searchEngine文件夹中有这样的.htaccess文件 RewriteEngine On RewriteRule ^\/?test$ view/index.php [NC,L] RewriteRule ^(.*)$ http://google.com [NC,L] 然后我在地址栏中键入: 本地主机/搜索引擎/测试 为什么要重定向到 不是 view/index.php 我认为这必须被重定向到 view/inde
RewriteEngine On
RewriteRule ^\/?test$ view/index.php [NC,L]
RewriteRule ^(.*)$ http://google.com [NC,L]
然后我在地址栏中键入:
- 本地主机/搜索引擎/测试
- view/index.php李>
- view/index.php
- 这是因为
mod\u rewrite
在循环中运行。第一条规则是这样做:
起始URL:
/searchEngine/test
/searchEngine/view/index.php
结束URL:
/searchEngine/view/index.php
现在L
标志导致mod_rewrite
再次循环。因此,现在您的起始URL变为:
起始URL:
/searchEngine/test
/searchEngine/view/index.php
现在,第一条规则的模式^test
不匹配,但您的第二条规则使用*
作为匹配模式,因此重定向到google
您可以使用以下规则来防止这种行为:
RewriteEngine On
RewriteRule ^/?test$ view/index.php [NC,L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ http://google.com [R,L]
第二条规则有以下附加条件:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
执行第一条规则后,REDIRECT\u STATUS
设置为200
。所以第二条规则只有在第一条规则没有首先执行时才会重定向,因此它将跳过/test
如果您使用的是Apache 2.4+,则可以使用END
而不是L
来结束执行:
RewriteEngine On
RewriteRule ^/?test$ view/index.php [NC,END]
RewriteRule ^ http://google.com [R,L]
发生这种情况是因为内部重定向,您可以使用结束标志而不是L来停止此行为:
RewriteEngine On
RewriteRule ^\/?test$ view/index.php [NC,END]
RewriteRule ^(.*)$ http://google.com [NC,L]
L标志实际上是做什么的。我读了一份文件,上面写着:“最后一站处理规则”。我认为停止处理意味着停止循环它不会中断循环,而是充当循环的继续,因此循环从开始就再次执行。结束标志是否中断循环?是的,它立即终止规则处理。