Regex .htaccess规则匹配太多
我正在尝试使用.htaccess来识别没有尾随文件路径的url 这是我的整个.htaccess文件:Regex .htaccess规则匹配太多,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我正在尝试使用.htaccess来识别没有尾随文件路径的url 这是我的整个.htaccess文件: Options +FollowSymLinks RewriteEngine on # AnyTown Portal RewriteCond %{HTTP_HOST} ^(.*)?anytownnews\..+\..{3}(?!\/(.+)) [NC] RewriteRule ^(.*)$ anytownnews.php [QSA,NC,L,DPI] web上的四个不同的正则表达式解析器报告此
Options +FollowSymLinks
RewriteEngine on
# AnyTown Portal
RewriteCond %{HTTP_HOST} ^(.*)?anytownnews\..+\..{3}(?!\/(.+)) [NC]
RewriteRule ^(.*)$ anytownnews.php [QSA,NC,L,DPI]
web上的四个不同的正则表达式解析器报告此正则表达式可以正确识别:
anytownnews.test.com
作为一场比赛
anytownnews.test.com/junk
作为非匹配项
但是,apache将此规则与这两个URL匹配并执行替换
我错过了什么
我也试过这个:
RewriteRule ^(.*)?anytownnews\..+\..{3}(?!\/(.+)) anytownnews.php [QSA,NC,L,DPI,END]
在这里测试时,它通过了我的两个测试用例:
但是apache完全忽略了这个表达式
如果您有任何想法,我们将不胜感激。看来您希望这样的事情发生
anytownnews.test.com -> rewritten to /anytownnews.php
anytownnews.test.com/folder/ -> don't rewrite
anytownnews.test.com/page1.html -> don't rewrite
这似乎正好实现了这一点
RewriteCond %{HTTP_HOST} ^anytownnews\..+\..{3} [NC]
RewriteRule ^$ /anytownnews.php [QSA,NC,L,DPI]
此外,您可以这样做,捕获子域并在重写规则中使用它,如果这是您的意图的话
RewriteCond %{HTTP_HOST} ^(?!www\.|signup\.)([a-z0-9-]+)\..+\..{3} [NC]
RewriteRule ^$ /%1.php [QSA,NC,L,DPI]
注意使用的是%1.php
,而不是$1
,因为我使用的是重写条件的反向引用
正则表达式将排除重写某些子域(例如,当前设置为www和signup)。如果不想排除任何子域,只需使用
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\..+\..{3} [NC]
RewriteRule ^$ /%1.php [QSA,NC,L,DPI]
您试图匹配的URL是什么,不想匹配的是什么?