Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex .htaccess规则匹配太多_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex .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上的四个不同的正则表达式解析器报告此

我正在尝试使用.htaccess来识别没有尾随文件路径的url

这是我的整个.htaccess文件:

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是什么,不想匹配的是什么?