RewriteRule, can't make it work
-
12-12-2019 - |
Question
URL: http://mysite.com/amember/login.php?amember_redirect_url=/ajax/?id=9999
I need it to be rewritten to: http://mysite.com/amember/login.php?amember_redirect_url=/?p=9999
I mean all of the urls of that type (with ID on the end) My rewriterule:
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]
So far looks legit, but it doesn't seem to be working...
Before that line I have 3 following lines:
RewriteEngine on
RewriteBase /
RewriteRule ^members/(.*) http://mysite.com/$1 [R=301,L]
Update. Tried this:
RewriteRule /amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]
doesn't work
RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]
either
RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) http://mysite.com/amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]
either
UPDATED:
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]
Solution
You can't match against the query string in a RewriteRule
. If you are requesting http://localhost/amember/login.php?something&foo
, the URI passed to a RewriteRule
is only /amember/logi.php
, therefore anything with a \?
will not match unless there's an encoded ?
(via a %3F) in the URI.
Additionally, you have a single param in your query string:
amember_redirect_url
= /ajax/?p=9999
The ?
inside the query string parameter's value isn't a parameter by itself because it's not separated by a &
, so you need to match against that and rewrite that:
RewriteCond %{QUERY_STRING} (.*)amember_redirect_url=/ajax/(.*)
RewriteRule ^/?amember/login\.php$ /amember/login.php?%1amember_redirect_url=/%2 [L,R=301]