首页 文章

url递归重写

提问于
浏览
-1

我正在尝试使用以下指令从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 回答

  • 0

    Mod重写将一遍又一遍地通过重写引擎运行URI,直到URI在重写引擎之前和之后相同 . 这就是发生的事情:

    • URI是 test.com

    • rule ^((.+)\.(.+))$ 匹配,URI重写为 my.php (带有一些查询字符串d = test.com)

    • compare: test.commy.php 不同,通过重写引擎运行URI

    • URI是 my.php

    • rule ^((.+)\.(.+))$ matches,URI重写为 my.php (带有一些查询字符串d = my.php)

    • 比较: my.phpmy.php 相同,在URI匹配之前和之后,停止写

    你的结果是 /my.php?d=my.php

    您需要添加条件,以便my.php不会应用规则 . 在你的rewriterule之前加上这个

    RewriteCond %{REQUEST_URI} !^/my.php
    
  • 0

    这对我有用:

    RewriteRule ^(.+)\.(.+)$ my.php?d=$1.$2
    

    效果不是递归地应用规则(不会发生),它根本不匹配 .

    顺便说一句,如果你想让引擎停在特定的一行,你可以添加[L] .

    测试重写规则的简便方法是this website .

相关问题