Сценарий: я переместил веб-сайт WordPress в новый домен и хочу перенаправить 301 все страницы из старого домена в новый домен. Оба сайта находятся на одной и той же учетной записи хостинга, на которой работает Apache. Старый сайт находится на корневом уровне (public_html), а новый сайт находится в подпапке (ниже/внутри корня).
Мне удалось заставить эту работу работать, но я хотел бы узнать и понять, почему это работает. Итак, ниже приведен краткий обзор моего «путешествия» и решения, а также три конкретных вопроса.
Сначала я попытался сделать редиректы вот так (код добавлен в корневой файл .htaccess):
# 301 Page Redirects - not working - causes redirect loop
redirect 301 / https://new-domain.com/
redirect 301 /services/ https://new-domain.com/services/
redirect 301 /recipes/ https://new-domain.com/recipes/
Но это вызывает цикл перенаправления. Я предполагаю, что файл .htaccess с этими правилами находится на корневом уровне и, следовательно, также влияет на подпапки.
Вопрос 1. Верно ли мое предположение о причине цикла перенаправления?
Затем я попытался быть более конкретным и вместо этого поместил этот код в корневой файл .htaccess:
# 301 Page Redirects - not working - does nothing at all - not sure why
redirect 301 https://old-domain.com/ https://new-domain.com/
redirect 301 https://old-domain.com/services/ https://new-domain.com/services/
redirect 301 https://old-domain.com/recipes/ https://new-domain.com/recipes/
Я надеялся, что приведенный выше код поможет, потому что он более специфичен для старого домена. Я думал, что он точно указывает старый домен и таким образом обходит цикл перенаправления. Но вместо этого этот код, похоже, вообще не действует. Цикл перенаправления исчез, но теперь перенаправления вообще не происходило.
Вопрос 2. Почему приведенный выше код вообще не создает никаких переадресаций?
Затем я нашел этот ответ и применил код из него, который отлично работает и создает все перенаправления. Кроме того, это намного элегантнее, чем мои предыдущие попытки выше. Это код:
# 301 Redirects from old-domain.com to new-domain.com - THIS CODE WORKS - Yay!
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old-domain.com$
RewriteRule (.*)$ https://new-domain.com/$1 [R=301,L]
Вопрос 3. Почему этот код не вызывает циклов перенаправления, когда я помещаю его в корневой файл .htaccess?
Я понимаю, что копирую/вставляю код, не полностью понимая, почему он работает. Поэтому я хотел бы объяснить простыми словами об этом поведении. Спасибо.