Вопрос или проблема
Я пытаюсь разобраться, как сгенерировать правильный код для моего .htaccess
Я нашел следующий код
RewriteEngine On RewriteCond %{HTTP_HOST} !^subdir\.maindomain\.co.uk$
[NC] RewriteRule ^(.*)$ https://shop\.maindomain\.co.uk/$1 [R=301,L]
Это отлично работает для перенаправления всех запросов на папки на поддомене, но мне нужно, чтобы папка
перенаправлялась на shop.maindomain.co.uk, а не на shop.maindomain.co.uk/oldshop, как это происходит сейчас с использованием вышеуказанного кода.
Я не могу разобраться, как добавить эту часть – надеюсь, это имеет смысл, спасибо за вашу помощь!
Ответ или решение
Для решения задачи перенаправления URL с основного домена на поддомен с исключением одной директории, потребуется использовать модуль мод_rewrite в файле .htaccess. Давайте разберем ваш текущий код и внесем необходимые изменения для достижения желаемого результата.
Ваш текущий код:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^subdir\.maindomain\.co.uk$ [NC]
RewriteRule ^(.*)$ https://shop\.maindomain\.co.uk/$1 [R=301,L]
Этот код корректно перенаправляет все запросы с основного домена на поддомен shop.maindomain.co.uk
, но не учитывает, что запрос к www.maindomain.co.uk/oldshop
должен перенаправляться на shop.maindomain.co.uk
, а не на shop.maindomain.co.uk/oldshop
.
Чтобы добавить это требование, необходимо внести дополнительные условия в ваши правила перенаправления. Вот как это можно сделать:
RewriteEngine On
# Исключение для oldshop
RewriteRule ^oldshop/?$ https://shop.maindomain.co.uk/ [R=301,L]
# Общее перенаправление для всех остальных запросов
RewriteCond %{HTTP_HOST} !^shop\.maindomain\.co.uk$ [NC]
RewriteRule ^(.*)$ https://shop.maindomain.co.uk/$1 [R=301,L]
Пояснение кода:
-
Включение модуля mod_rewrite: Команда
RewriteEngine On
активирует модуль переопределения. -
Исключение для
/oldshop
:- Правило
RewriteRule ^oldshop/?$ https://shop.maindomain.co.uk/ [R=301,L]
обрабатывает запросы кoldshop
на корневом уровне. Использование/?
позволяет учесть возможный слэш в конце URL. - Установка флага
[R=301,L]
указывает на использование постоянного переадресации (301) и завершает обработку других правил, если это правило применено.
- Правило
-
Общее правило перенаправления:
RewriteCond %{HTTP_HOST} !^shop\.maindomain\.co.uk$ [NC]
проверяет, что запрос не на поддоменshop
.RewriteRule ^(.*)$ https://shop.maindomain.co.uk/$1 [R=301,L]
обрабатывает все остальные запросы, перенаправляя их на соответствующий путь на поддоменеshop
.
Рекомендации:
- Проверка правил: После внесения изменений рекомендуется протестировать все перенаправления, чтобы убедиться, что они работают как ожидается, и URL-адреса перенаправляются в правильные места.
- Кэширование: Помните, что браузеры могут кэшировать 301 редиректы. Для новых правил очистите кэш браузера или используйте режим инкогнито для тестирования.
- SEO: Постоянные перенаправления (301) рекомендуется использовать для сохранения SEO-весов, так как они передают "ссылочный вес" от старых URL к новым.
Таким образом, вы получите корректное перенаправление всех запросов с вашего основного домена на поддомен, за исключением определенной папки oldshop
, которая будет перенаправлена непосредственно на корень поддомена.