Запуск мультисайта 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>
который до сих пор кажется отличным.
Вопросы:
Этот метод кажется разумным?
Есть ли лучший способ справиться с этим, учитывая проблему, которую я вижу?
Если бы я хотел сделать эту перезапись универсальной для обработки любого входящего домена (пока этот домен не включить мое базовое доменное имя мультисайта!) - может ли кто-нибудь показать мне, как сформировать условие / правило?
Мне нравится жестко кодировать реальный домен, потому что это гарантирует, что ничего больше не будет затронуто, но я могу представить, как только у меня будет несколько сотен таких, это может стать глупым.
Когда я контролирую DNS, я могу использовать псевдоним не WWW для WWW, что делает WP мультисайтов счастливым.
Не совсем уверен, что вы подразумеваете под «псевдонимом» здесь, но, по-видимому, вам нужно реализовать какое-то каноническое перенаправление без WWW на WWW, даже когда вы контролируете DNS?
- Этот метод кажется разумным?
Итак, такой тип перенаправления кажется разумным. Казалось бы, создание дополнительных VirtualHost потребует гораздо больше усилий. (?)
- Есть ли лучший способ справиться с этим, учитывая проблему, которую я вижу?
Как упоминалось в комментариях, клиент мог установить A
запись на www.example.com
вместо этого и иметь доступ к сайту только из www
поддомен. Но это, наверное, нежелательно. Так что в любом случае вам придется решить проблему канонизации домена на вашей стороне, что потребует перенаправления 301.
- Если бы я хотел сделать эту перезапись универсальной для обработки любого входящего домена (если этот домен не включает мое базовое доменное имя мультисайта!) - может ли кто-нибудь показать мне, как сформировать условие / правило?
В конфигурации вашего сервера вы можете сделать что-то вроде следующего, чтобы обработать любой домен, но исключить основание домен:
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
.