Как перенаправить URL на подсайт, за исключением одной папки, которая должна идти в другое место.

Вопрос или проблема

Я пытаюсь разобраться, как сгенерировать правильный код для моего .htaccess

Я нашел следующий код

RewriteEngine On RewriteCond %{HTTP_HOST} !^subdir\.maindomain\.co.uk$
[NC] RewriteRule ^(.*)$ https://shop\.maindomain\.co.uk/$1 [R=301,L]

Это отлично работает для перенаправления всех запросов на папки на поддомене, но мне нужно, чтобы папка

www.maindomain.co.uk/oldshop

перенаправлялась на 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]

Пояснение кода:

  1. Включение модуля mod_rewrite: Команда RewriteEngine On активирует модуль переопределения.

  2. Исключение для /oldshop:

    • Правило RewriteRule ^oldshop/?$ https://shop.maindomain.co.uk/ [R=301,L] обрабатывает запросы к oldshop на корневом уровне. Использование /? позволяет учесть возможный слэш в конце URL.
    • Установка флага [R=301,L] указывает на использование постоянного переадресации (301) и завершает обработку других правил, если это правило применено.
  3. Общее правило перенаправления:

    • 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, которая будет перенаправлена непосредственно на корень поддомена.

Оцените материал
Добавить комментарий

Капча загружается...