【问题标题】:RewriteRule - a.php?a=123 to /b/123RewriteRule - a.php?a=123 到 /b/123
【发布时间】:2009-02-20 18:56:42
【问题描述】:

我正在尝试让 Apache 将 /a.php?a=123 重定向到 /b/123(其中 123 可以是 1 到 9999 之间的任何数字)但似乎无法让它工作。

这是我在 htaccess 中的:

RewriteEngine on

RewriteRule ^a.php?a=([0-9]+) /b/$1 [L]
RewriteRule ^a.php$ /c/ [L]

这样转到 a.php?a=123 会导致 404,但只转到 a.php 会按预期工作。 我试图逃避? (RewriteRule ^a.php\?a=([0-9]+) /b/$1 [L]) 但它仍然不起作用。

请问我做错了什么?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    查询字符串不是在 RewriteRule 指令中测试的 URI 路径的一部分。这只能使用RewriteCond 指令进行测试:

    RewriteCond %{QUERY_STRING} ^a=([0-9]+)$
    RewriteRule ^a\.php$ /b/%1? [L,R]
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^a\.php$ /c/ [L,R]
    

    但是如果你想要它的其他方式(/b/123 的请求被重定向到/a.php?a=123):

    RewriteRule ^b/([0-9]+)$ a.php?a=$1 [L]
    

    【讨论】:

    • 谢谢,这看起来应该可以工作,但是现在当我转到“a.php?a=123”或只是“a.php”时,两者都将我重定向到 /c/
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2023-01-04
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多