Для веб-сервера, на котором размещено множество доменных имен, мы хотели бы реализовать перенаправление, при котором любой поддомен в любом домене перенаправляется на его www. эквивалент.
sub1.domain1.com -> www.domain1.com
sub2.domain5.com -> www.domain5.com
anothersub.moredomains.com -> www.moredomains.com
etc
Мне не удалось найти правило перезаписи, охватывающее поддомен и домен с подстановочными знаками.
Любая помощь приветствуется!
Если домены всегда состоят из двух компонентов (x.tld), это довольно просто. Если вам нужно принимать во внимание такие вещи, как x.co.uk, вам понадобится либо более крупное правило, либо фактический список доменов.
Не тестировал, но что-то вроде этого может сработать.
# enable mod_rewrite
RewriteEngine On
# if the host is prefixed with www, don't match.
RewriteCond %{HTTP_HOST} !^www\.
# match the last two components of the hostname (see below for a bette regex)
RewriteCond %{HTTP_HOST} (.+?)\.(.+?)$
# rewrite to the hostname from the match above (%1 and %2) plus the current url ($1).
RewriteRule /(.*) http://www.%1.%2/$1 [L,R=301]
Добавить
LogLevel alert rewrite:trace
и вы можете использовать grep для 'rewrite:' в журнале ошибок для получения отладочной информации.
В (.+?)
условия могут быть более точными, как "что угодно, только не точка" ([^\.]+)
, но я не помню точный синтаксис в любом движке регулярных выражений, который использует Apache, поэтому в приведенной выше версии проще заставить что-то работать.