RewriteRule,不能使它工作

时间:2012-10-02 15:20:26

标签: regex mod-rewrite url-rewriting rewrite url-rewrite-module

URL: http://mysite.com/amember/login.php?amember_redirect_url=/ajax/?id=9999

我需要将它重写为: http://mysite.com/amember/login.php?amember_redirect_url=/?p=9999

我指的是那种类型的所有网址(最后带有ID) 我的重写:

RewriteRule http://mysite.com/amember/login.php\?amember_redirect_url=/ajax/\?id=(.*) http://mysite.com/amember/login.php\?amember_redirect_url=\/?p=$1 [R=301,L]

到目前为止看似合法,但它似乎没有起作用......

在该行之前,我有以下三行:

RewriteEngine on
RewriteBase /
RewriteRule ^members/(.*) http://mysite.com/$1 [R=301,L]

更新。 试过这个:

RewriteRule /amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

不起作用

RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

或者

RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) http://mysite.com/amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

或者

更新:

RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC]
RewriteRule /amember/login.php\?amember_redirect_url=/ajax/$ /amember/login.php\?amember_redirect_url=/?p=%1 [NC,R=301,L]

1 个答案:

答案 0 :(得分:0)

您无法与RewriteRule中的查询字符串进行匹配。如果您要求http://localhost/amember/login.php?something&foo,则传递给RewriteRule的URI仅为/amember/logi.php,因此除非有编码\?,否则?的任何内容都不会匹配(通过URI中的%3F)。

此外,您的查询字符串中有参数:

amember_redirect_url = /ajax/?p=9999

查询字符串参数值中的?本身不是一个参数,因为它没有被&分隔,所以你需要匹配它并重写:

RewriteCond %{QUERY_STRING} (.*)amember_redirect_url=/ajax/(.*)
RewriteRule ^/?amember/login\.php$ /amember/login.php?%1amember_redirect_url=/%2 [L,R=301]