我正在尝试使用以下指令从www.xxx.com/test.com重写URL到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或类似的东西 . 这是否意味着模式正在递归应用?我该如何修复正则表达式?
2 回答
Mod重写将一遍又一遍地通过重写引擎运行URI,直到URI在重写引擎之前和之后相同 . 这就是发生的事情:
URI是 test.com
rule
^((.+)\.(.+))$
匹配,URI重写为 my.php (带有一些查询字符串d = test.com)compare: test.com 与 my.php 不同,通过重写引擎运行URI
URI是 my.php
rule
^((.+)\.(.+))$
matches,URI重写为 my.php (带有一些查询字符串d = my.php)比较: my.php 与 my.php 相同,在URI匹配之前和之后,停止写
你的结果是
/my.php?d=my.php
您需要添加条件,以便my.php不会应用规则 . 在你的rewriterule之前加上这个
这对我有用:
效果不是递归地应用规则(不会发生),它根本不匹配 .
顺便说一句,如果你想让引擎停在特定的一行,你可以添加[L] .
测试重写规则的简便方法是this website .