#regex #apache #mod-rewrite #forward
Вопрос:
Весь URL-адрес моей системы меняется, поскольку он перемещается в другое место. Я хотел бы использовать свой старый Apache для переадресации 301 всех вызовов на новую систему в течение некоторого времени.
У меня есть такие глубокие ссылки:
https://old.example/groups/something
который останется неизменным в новой системе, но с другим базовым URL-адресом, например:
https://new.example/groups/something
Я ищу правило перезаписи Apache, которое поддерживает все после old.example/
изменения части базового url и отправки пользователя в местоположение deeplink, которое он запрашивал в новой системе.
Я пытался:
RewriteCond %{HTTP_HOST} old.example$
RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* https://new.example/ [R=301,L]
но это работает только в том случае, если базовый URL вызывается напрямую, а не для глубоких ссылок.
Комментарии:
1. Используете ли вы
.htaccess
?
Ответ №1:
RewriteCond %{HTTP_HOST} old.example$ RewriteCond %{REQUEST_URI} ^/$ RewriteRule .* https://new.example/ [R=301,L]
Ваше второе условие ( RewriteCond
директива) специально проверяет, что REQUEST_URI
это только корень документа («базовый URL»). Вы также не передаете запрошенный URL-путь к целевому URL.
Однако, если новый сайт переместился в «другое местоположение», а новые и старые домены указывают на разные серверы, вы можете использовать простую Redirect
директиву на вашем «старом сервере Apache», чтобы перенаправить все и сохранить ту же структуру URL. Например:
Redirect 301 / https://my.new.system.url.net/
Redirect
Директива соответствует префиксу, и все, что после совпадения, копируется в конец целевого URL. Итак, запрос на /groups/something
перенаправляется на https://my.new.system.url.net/groups/something
.
Протестируйте с 302 (временным) перенаправлением, чтобы избежать потенциальных проблем с кэшированием.
Ссылка:
В сторону: просто краткое замечание об «уникальной» терминологии, которую вы использовали для описания URL, поскольку это немного сбивает с толку…
То, что вы называете «базовым URL», на самом деле является именем хоста (или доменным именем).
И то, что вы называете «глубокой ссылкой», на самом деле является URL-путем (или оставшейся частью URL). URL-путь начинается с первой косой черты после имени хоста.