Я восстановил свой старый сайт. У этого старого сайта был поддомен: forum.example.com
. Теперь его больше не существует. Человек, который заходит на мой сайт, используя forum.example.com
должен быть перенаправлен на example.com
.
Мой .htaccess
файл:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Если хост не example.com
, перенаправить на example.com
. Не должен forum.example.com
вписывается в состояние?
Теперь что касается необязательной части вопроса. Было бы здорово, если бы кто-нибудь объяснил мне приведенное выше правило.
Вот что я понимаю в приведенном выше правиле:
Если хост НЕ example.com
(!^example.com$
)
перенаправить на http://example.com
.
Чего я не понимаю, так это первой части регулярного выражения правила: ^(.*)$
, а затем ссылку на него ($1
). Каким образом совпадение всего можно указать в качестве пути к запрошенному файлу? Разве он не сделал бы что-то подобное?
http://example.com/http://www.example.com/[requested file]
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Приведенный выше код смотрит на HTTP-хост подключающегося браузера. Обратите внимание, что .htaccess может работать только с запросом, который может достигнуть веб-сервера. Это будет работать для forum.example.com
, но только если forum.example.com
фактически загружает содержимое в каталог, в котором находится файл .htaccess. Если у вас не настроены записи DNS (например, *
Запись или forum
Запись) то он вообще не перейдет на сайт, потому что DNS недействителен. Кроме того, Apache должен быть настроен для загрузки сайта для этого VirtualHost. Поэтому он также должен быть указан в конфигурации Apache, прежде чем .htaccess сможет пересылать указанный URL-адрес.
Что касается вашего второго вопроса, в RewriteRule
часть ^(.*)$
, это соответствует только файлу, доступ к которому осуществляется с сервера. В RewriteCond
часть применяет правило только к определенным именам хостов, тогда ^(.*)$
указывает, что любой запрос следует правилам перезаписи.
Таким образом, приведенный выше код .htaccess будет применяться ко всем запросам после /
если хост не равен example.com
.
Дайте мне знать, если вам понадобятся дальнейшие объяснения.