为什么这个重写规则导致无限循环?

时间:2017-10-31 17:21:53

标签: regex .htaccess mod-rewrite

我想从子目录中提供与特定模式匹配的文件,但我的规则导致无限重定向循环。在此示例中,我想从新路径提供Google网站验证文件:

RewriteRule ^(google.*html)$ /google_site_verification/$1 [L]

根据我的错误日志,这会导致内部重定向循环,不断向路径添加/google_site_verification。我也尝试过:

RewriteCond %{REQUEST_URI} ^/google.*html$
RewriteRule ^(.*)$ /google_site_verification/$1 [L]

这给出了相同的结果。由于我的正则表达式明确定义了模式的开始和结束,为什么/google_site_verification/googleabcd1234.html匹配?我尝试过的唯一有用的就是添加

RewriteCond %{REQUEST_FILENAME} !-f

进入链条,但我不想依赖文件不存在的东西来工作。

1 个答案:

答案 0 :(得分:2)

您可以使用:

RewriteRule ^(google[^/]*\.html)$ /google_site_verification/$1 [L]

你的问题是两个网址匹配:

/ <强>谷歌即可。的 HTML
/google_site_verification/google.html