Как перенаправить 301 эту ссылку (https://www.example.com/?lang=en) в эту ссылку (https://www.example2.com/en/)? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь сделать редирект 301 по этой ссылке в моем файле .htaccess.

Старый URL: https://www.example.com/?lang=en

Новый URL: https://www.example2.com/en/

Я попытаюсь использовать эту инструкцию:

RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=en$

RewriteRule   ^(.*)$   /en/     [R=301,L]

как ответ на этот вопрос ( 301 перенаправление с URL со строкой запроса на новый домен с другой строкой запроса ),но мой результат таков: https://www.example2.com/en/?lang=en.

Как я могу удалить строку запроса "? lang = en" и получить новый URL?

Теперь это работает с добавлением флага QSD, но теперьУ меня есть эта проблема:

Мне тоже нужно перенаправить ссылки:

Старый URL 2: https://www.example.com/?lang=de

Новый URL 2: https://www.example2.com/de/

И это ссылки:

Старый URL-адрес 3: https://www.example.com/?lang=ru

Новый URL-адрес 3: https://www.example2.com/ru/

Если я использую приведенную выше инструкцию, изменив строку запроса,перенаправление не работает для всех языков.

RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=en$

RewriteRule   ^(.*)$   /en/     [R=301,L,QSD]



RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=de$

RewriteRule   ^(.*)$   /de/     [R=301,L,QSD]



RewriteCond   %{REQUEST_URI}    ^/$

RewriteCond   %{QUERY_STRING}   ^lang=ru$

RewriteRule   ^(.*)$   /ru/     [R=301,L,QSD]

Как я могу решить эту новую проблему?

РЕДАКТИРОВАТЬ 2:

Решение для @ QuickBecko

Естьдва решения, в зависимости от версии Apache:

Первое решение

RewriteCond   %{REQUEST_URI}    ^/$
RewriteCond   %{QUERY_STRING}   ^lang=en$
RewriteRule   ^(.*)$   /en/     [R=301,L,QSD]
RewriteCond   %{QUERY_STRING}   ^lang=de$
RewriteRule   ^(.*)$   /de/     [R=301,L,QSD]
RewriteCond   %{REQUEST_URI}    ^/$
RewriteCond   %{QUERY_STRING}   ^lang=ru$
RewriteRule   ^(.*)$   /ru/     [R=301,L,QSD]

Второе решение

RewriteCond   %{QUERY_STRING}   ^lang=en$
RewriteRule   ^(.*)$   /en/?     [R=301,L]
RewriteCond   %{QUERY_STRING}   ^lang=de$
RewriteRule   ^(.*)$   /de/?     [R=301,L]
RewriteCond   %{QUERY_STRING}   ^lang=ru$
RewriteRule   ^(.*)$   /ru/?     [R=301,L]

1 Ответ

0 голосов
/ 23 января 2019

Этот будет делать работу:

RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^$ https://www.example2.com/en/?  [R=301,L]

Обычно, если вы добавите ? в конце, он удалит запрос из ссылки.

...