Перенаправление с другого порта на поддомен – htaccess

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

5 дней назад я создал экземпляр Digital Ocean для установки сайта WordPress. У меня уже есть свой собственный домен, и я создал DNS поддомен blog.example.com. Сервер работает как на nginx, так и на apache, поэтому мой порт Apache – 8082. Ниже показан мой фактический URL-адрес WordPress:

www.example.com:8082/wordpress/

Несколько вещей, которые я пробовал, приведены ниже.

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com:8082/wordpress\
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-z0-9-]+)/? http://$1.example.com [R=301,NC,L]

</IfModule>

Теперь мой ожидаемый результат – это

www.example.com:8082/wordpress\ 

в

blog.example.com

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com:8082/wordpress\

Переменная сервера HTTP_HOST содержит значение заголовка HTTP-запроса Host – это не включает URL-путь (т. е. /wordpress/). Но почему вы также включили обратный слеш (\) в конце, вместо (прямого) слеша (/)? Это просто опечатка? (Хотя вы также перенесли это в пример ниже?)

RewriteRule ([a-z0-9-]+)/? http://$1.example.com [R=301,NC,L]

Не совсем понимаю, какая идея за этим стоит, но эта директива предполагает, что blog присутствует в запрашиваемом URL-пути – но его нет в вашем примере? И, если только у вас нет нескольких перенаправлений поддоменов, то, похоже, нет необходимости в обобщенном совпадении и замене?

Я бы также задался вопросом, зачем вам условия, которые проверяют, что запрос не сопоставляется с каталогом или файлом. Проверяя, что он не сопоставляется с каталогом, вы не перенаправите /wordpress/ (предполагая, что это физический каталог).

Чтобы перенаправить www.example.com:8082/wordpress/ на blog.example.com, как в вашем примере (одностороннее перенаправление*1), вам нужно сделать что-то вроде следующего вверху вашего корневого .htaccess файла:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com:8082
RewriteRule ^wordpress/$ http://blog.example.com/ [R=301,NC,L]

Если файл .htaccess находится внутри подкаталога /wordpress, тогда измените RewriteRule шаблон на ^$ вместо ^wordpress/$

Если example.com:8082 и blog.example.com указывают на разные области файловой системы, то вы можете полностью удалить условие (RewriteCond директива).

Нет необходимости в обертке <IfModule> или директивах RewriteBase здесь.

*1 Хотя меня удивляет, что вы не хотите массово перенаправить все под-URLs тоже? т. е. Перенаправить www.example.com:8082/wordpress/<something> на blog.mydomain.com/<something>. Или вы хотите?

Ответ или решение

Для перенаправления с одного порта на поддомен на вашем сервере, работающем под управлением Apache (в вашем случае на порту 8082), можно использовать файл конфигурации .htaccess. По вашему вопросу видно, что вы ожидаете перенаправление с URL-адреса www.example.com:8082/wordpress/ на blog.example.com.

Вот оптимизированное решение для вашего случая, которое решает указанные вами проблемы и обеспечивает необходимое перенаправление.

Настройка файла .htaccess

  1. Убедитесь, что .htaccess включен: Для начала убедитесь, что в конфигурации Apache разрешено использование файлов .htaccess. Обычно это настраивается в файле конфигурации вашего виртуального хоста с помощью директивы AllowOverride All.

  2. Создайте или измените файл .htaccess: Файл .htaccess должен находиться в корневом каталоге вашего сайта или в каталоге /wordpress, если вы используете его как подкаталог. Используйте следующий код:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com:8082$ [NC]
RewriteRule ^wordpress/?$ http://blog.example.com/ [R=301,L]

Объяснение кода:

  • RewriteEngine On: Включает движок модификации URL.
  • RewriteCond: Эта строка проверяет, соответствует ли заголовок Host (то есть доменное имя, которое вводит пользователь) тому, что вы ожидаете, т.е. www.example.com:8082. Используйте флаг [NC], чтобы сделать проверку нечувствительной к регистру.
  • RewriteRule: Эта строка выполняет само перенаправление. Если URL-адрес соответствует шаблону ^wordpress/?$, перенаправление происходит на http://blog.example.com/. Использование флага [R=301,L] означает, что это постоянное перенаправление, и оно будет последним правилом, которое выполняется, если условие выполнено.

Дополнительные замечания:

  • Перенаправление других URL: Если вы хотите перенаправлять также другие страницы под /wordpress, вам нужно модифицировать правило. Например, для перенаправления всех подстраниц можно использовать:
RewriteRule ^wordpress/(.*)$ http://blog.example.com/$1 [R=301,L]
  • Проверка работоспособности: После внесения изменений в .htaccess важно проверить перенаправление. Очистите кэш вашего браузера для того, чтобы избежать кэширования старых правил перенаправления.

  • Секреты SEO: Постоянные 301 перенаправления помогают сохранить SEO вашего сайта, так как поисковые системы передают "вес" старого URL-адреса новому.

  • Безопасность: Убедитесь, что ваши настройки безопасности и файрвола на сервере не блокируют порты и что DNS-записи для blog.example.com корректно указывают на ваш сервер.

Следуя приведённым выше рекомендациям, вы сможете успешно настроить перенаправление на поддомен с нужного порта. Эта настройка не только обеспечит удобный доступ к вашему блогу, но также поможет улучшить структуру URL и SEO вашего сайта.

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

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