apache2.2虚拟主机重写规则不匹配

时间:2013-11-18 16:57:15

标签: mod-rewrite pattern-matching apache2.2

我在虚拟主机中有一个非常简单的重写规则:

RewriteRule ^/?([^.]+)\.([^(htm)]+)$ /$1.htm [L,QSA]
RewriteRule ^/(someotherrule)$ /me [L]

拨打电话:http://myurl.com/test.php

我希望规则匹配并将网址重写为http://myurl.com/test.htm

相反,我在我的rewriteLog中找到了这个:

applying pattern '^/?([^.]+)\\.([^(htm)]+)$' to uri '/test.php'
applying pattern '^/(someotherrule)$' to uri '/test.php'
rewrite '/test.php' -> '/me'

显然我的第一次重写规则模式有问题,但我看不清究竟是什么。可能是因为我的大脑因缺乏睡眠而结。因此,如果有人愿意花一点时间来指出我的错误,我会非常感激。

1 个答案:

答案 0 :(得分:0)

您应该替换第一条规则,结果是:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^[^.]+\.htm$ [NC]
RewriteRule ^/?([^.]+)\..*$ /$1.htm [L,QSA]

RewriteRule ^/(someotherrule)$ /me [L]

错误位于 [^(htm)] ,这意味着文件扩展名不包含字符:(,h,t,m,),而不是您所期望的.htm。