2

网址: 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]

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

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

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]
4

1 回答 1

0

您无法匹配 a 中的查询字符串RewriteRule。如果您正在请求http://localhost/amember/login.php?something&foo,则传递给 a 的 URIRewriteRule是 only /amember/logi.php,因此任何带有 a 的东西\?都不会匹配,除非?URI 中有一个编码(通过 %3F)。

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

amember_redirect_url=/ajax/?p=9999

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

RewriteCond %{QUERY_STRING} (.*)amember_redirect_url=/ajax/(.*)
RewriteRule ^/?amember/login\.php$ /amember/login.php?%1amember_redirect_url=/%2 [L,R=301]
于 2012-10-02T17:38:07.427 回答