我正在尝试将网址从www.xxx.com/test.com重写为www.xxx.com/my.php?d=test.com 使用以下指令:
Options Indexes FollowSymLinks RewriteEngine On RewriteRule ^((.+)\.(.+))$ my.php?d=$1
这不起作用,例如,网址是www.xxx.com/test.com 它似乎被重写为www.xxx.com/my.php?d=test.com 然后重写到www.xx.com/my.php?d=my.php或类似的东西。这是否意味着模式正在递归应用? 我该如何修复正则表达式?
答案 0 :(得分:0)
这对我有用:
RewriteRule ^(.+)\.(.+)$ my.php?d=$1.$2
效果不是递归地应用规则(不会发生),它根本就不匹配。
顺便说一句,如果你想让引擎停在特定的一行,你可以添加[L]。
测试重写规则的简便方法是this website。
答案 1 :(得分:0)
Mod重写将一遍又一遍地通过重写引擎运行URI,直到URI在通过重写引擎之前和之后相同。这就是发生的事情:
^((.+)\.(.+))$
匹配,URI重写为 my.php (带有一些查询字符串 d = test.com )< / LI>
^((.+)\.(.+))$
匹配,URI重写为 my.php (带有一些查询字符串 d = my.php )< / LI>
您的结果是/my.php?d=my.php
您需要添加条件,以便my.php不会应用规则。在您的重写之前添加此内容
RewriteCond %{REQUEST_URI} !^/my.php