Назад | Перейти на главную страницу

Просмотрите / улучшите мой план перезаписи .htaccess без www на www

Запуск мультисайта WP с клиентом, который может использовать собственное доменное имя. Отлично работает - за исключением случая, когда клиент не использует мои серверы имен и просто имеет запись A, указывающую на статический IP-адрес WP.

Это иногда случается, когда клиентский DNS имеет тонну служебных записей (например, Office 365), просто безопаснее оставить DNS там.

Когда я контролирую DNS, я могу использовать псевдоним не WWW для WWW, что делает WP мультисайтов счастливым. Когда клиент просто использует указатель записи A, многосайтовый WP отключает входящий не-WWW-запрос и попадает на страницу регистрации для мультисайта. Ему действительно нужен www, чтобы работать правильно (к сожалению).

Я решаю для каждого клиента, делая это в .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]
</IfModule>

который до сих пор кажется отличным.

Вопросы:

  1. Этот метод кажется разумным?

  2. Есть ли лучший способ справиться с этим, учитывая проблему, которую я вижу?

  3. Если бы я хотел сделать эту перезапись универсальной для обработки любого входящего домена (пока этот домен не включить мое базовое доменное имя мультисайта!) - может ли кто-нибудь показать мне, как сформировать условие / правило?

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

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

Не совсем уверен, что вы подразумеваете под «псевдонимом» здесь, но, по-видимому, вам нужно реализовать какое-то каноническое перенаправление без WWW на WWW, даже когда вы контролируете DNS?

  1. Этот метод кажется разумным?

Итак, такой тип перенаправления кажется разумным. Казалось бы, создание дополнительных VirtualHost потребует гораздо больше усилий. (?)

  1. Есть ли лучший способ справиться с этим, учитывая проблему, которую я вижу?

Как упоминалось в комментариях, клиент мог установить A запись на www.example.com вместо этого и иметь доступ к сайту только из www поддомен. Но это, наверное, нежелательно. Так что в любом случае вам придется решить проблему канонизации домена на вашей стороне, что потребует перенаправления 301.

  1. Если бы я хотел сделать эту перезапись универсальной для обработки любого входящего домена (если этот домен не включает мое базовое доменное имя мультисайта!) - может ли кто-нибудь показать мне, как сформировать условие / правило?

В конфигурации вашего сервера вы можете сделать что-то вроде следующего, чтобы обработать любой домен, но исключить основание домен:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^base-domain-to-exclude\.com [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

Если HTTP_HOST не начинается с www. затем перенаправить на тот же хозяин с участием www. добавлено.

Вам также не нужен <IfModule> обертка здесь. Вы уже знаете, что на вашем сервере включен mod_rewrite, но даже в этом случае <IfModule> wrapper требуется только в том случае, если ваш сайт предназначен для «работы» без mod_rewrite.

Вы можете просто добавить отдельный виртуальный хост для example.com который просто обслуживает 301, отправляя клиента на www.example.com.