Вопрос или проблема
Мой основной домен – https://example.com. Я решил создать блог в другом подсайте и из-за проблем с безопасностью на другом сервере. С помощью ProxyPass в конфигурации Apache VirtualHost я продемонстрировал адрес https://blog.example.com/blog как https://example.com/blog.
Основной сервер запускал приложение nextjs.
Конфигурация http-vhost.conf основного сервера:
<VirtualHost *:443>
ServerAdmin webmaster@localhost
UserDir disabled
ServerName example.com
ServerAlias example.com
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
CustomLog /var/log/httpd/homedir.log homedir
CustomLog /var/log/httpd/access_log combined
ErrorLog /var/log/httpd/error_log
ProxyPreserveHost On
ProxyPass "/blog" https://blog.example.com/blog
ProxyPassReverse "/blog" https://blog.example.com/blog
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
<Location "/blog">
ProxyPreserveHost Off
ProxyPassReverse "https://blog.example.com"
ProxyErrorOverride On
</Location>
</VirtualHost>
Но, к сожалению, я не могу отключить этот адрес https://blog.example.com/blog. Я хочу только показать этот адрес https://example.com/blog.
Существует ли способ выполнить вышеуказанную задачу только с помощью .htaccess на сервере blog.example.com?
blog.example.com работает на сервере wordpress, используя общий хостинг, и я не могу настроить httpd-vhost.conf, и я могу только изменить файл .htaccess.
Ответ или решение
Для решения проблемы с отображением адреса https://blog.example.com/blog вместо https://example.com/blog при использовании прокси на вашем сервере Apache, мы можем воспользоваться файлом .htaccess на сервере subdomain (blog.example.com). Ниже приведены шаги, которые помогут вам скрыть оригинальный адрес и сделать его редиректом на основной домен.
Шаг 1: Редирект на основной домен
В файле .htaccess на сервере blog.example.com поместите следующий код:
RewriteEngine On
# Делаем редирект с blog.example.com/blog на example.com/blog
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^blog/(.*)$ https://example.com/blog/$1 [R=301,L]
Объяснение кода:
RewriteEngine On
: Этот параметр активирует механизм переписывания URL-адресов.RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
: Здесь мы проверяем, что хост соответствует вашему поддомену blog.example.com. Условие не чувствительно к регистру благодаря флагу [NC].RewriteRule ^blog/(.*)$ https://example.com/blog/$1 [R=301,L]
: Если условие выполнено, переписываем URL-адрес. Здесь мы делаем перенаправление с любого URL, начинающегося на /blog, на соответствующий URL в основном домене.
Шаг 2: Убедитесь, что SUBDOMAIN не доступен напрямую
Вы также можете запретить прямой доступ к вашему блогу через поддомен, чтобы избежать ненужных переходов. Для этого добавьте следующий код в .htaccess:
# Запрет доступа к блогу через поддомен
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^ - [F,L]
Данный конфигурационный код заблокирует все запросы к поддомену blog.example.com, генерируя ответ с кодом 403 (доступ запрещен).
Заключение
Эти изменения в файле .htaccess на сервере blog.example.com позволят скрыть оригинальный адрес вашего блога и перенаправить его на основной домен. Убедитесь, что после внесения изменений вы протестируете все сценарии доступа, чтобы убедиться, что перенаправления работают корректно и доступ к блогу через поддомен действительно заблокирован. Это не только улучшит безопасность, но и обеспечит более удобный пользовательский опыт для ваших посетителей.
Используйте эти рекомендации с осторожностью, чтобы не повредить существующие функциональности вашего блога и учтите, что корректная настройка .htaccess может влиять на производительность и SEO вашего сайта.