как установить 301 перенаправление для URL-адреса с '?' как символы в URL?

Я хочу перенаправить все URL-адреса, имеющие id после 'emailthisone?'.

примерL:

http://news4u.com/emailmeone?id=1234' . При доступе к этому URL-адресу он должен быть перенаправлен на http;//news4u.com/new/emailmeone?id=1234.

Я пытался установить RedirectMatch 301 /emailmeone?(.*) http://news4u.com/new/emailmeone$1, но это будет действовать, даже если '?' после 'emailmeone'.

Как этого добиться.

Спасибо


person Manojkumar    schedule 21.08.2012    source источник


Ответы (1)


Если вы используете Redirect или RedirectMatch, несмотря на то, что строка запроса будет добавлена ​​автоматически, нет проверки того, что строка запроса на самом деле id=something:

RedirectMatch 301 ^/emailmeone$ /new/emailmeone

?id=1234 автоматически добавляется в конец цели. Вы можете проверить бит id, если используете mod_rewrite:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=[0-9]
RewriteRule ^emailmeone$ /new/emailmeone [L,QSA]
person Jon Lin    schedule 21.08.2012
comment
но это также перенаправит всю ссылку, которая не будет иметь ?id, как строка запроса в URL-адресе. Я также имею в виду http://news4u.com/emailmeone. Но мне нужно перенаправить только URL-адреса, такие как http://news4u.com/emailmeone?id=1234 - person Manojkumar; 21.08.2012
comment
@NaanuManu Правильно, поэтому есть второй вариант (с mod_rewrite), который действительно проверяет. Вы не можете проверить строку запроса в Redirect или RedirectMatch. - person Jon Lin; 21.08.2012
comment
RewriteCond %{QUERY_STRING} ^id RewriteRule ^emailmeone$ /alerts/emailmeone[R=301,L] будет ли это работать по-другому. Я удалил [0-9] и проверил, есть ли в строке запроса id или нет. все равно оба не работают. - person Manojkumar; 21.08.2012