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

Как перенаправить несколько доменов на www. с директивой mod_alias «Перенаправление»?

Я пытаюсь перенаправить несколько VirtualHosts без префикса www. от одного VirtualHost к другому, например:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias example.org
    ServerAlias example.net
    # I either need some kind of Apache conditional here...
    Redirect 301 / http://www.example.com/
    # ... or I need to substitute the Redirect *URL* with a variable
    # for the ServerName/ServerAlias
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

Я мог бы просто создать несколько контейнеров VirtualHost и перенаправить каждый по отдельности, но я предпочитаю не повторять свой код, если это возможно.

Я использую Apache 2.2 и Я предпочитаю не использовать mod_rewrite перенаправить. Я честно отношусь к Apache, но далеко не специалист.

Решение, которое я использовал, не является дружественным к «Не повторяйся», но оно работает и помогает мне добиться того, чтобы я не использовал mod_rewrite. Любые лучшие решения, и я с радостью отмечу ваш ответ правильно.

<VirtualHost *:80>
    ServerName example.com
    Redirect 301 / http://www.example.com/
</VirtualHost>

<VirtualHost *:80>
    ServerName example.org
    Redirect 301 / http://www.example.org/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    ServerName www.example.org
</VirtualHost>

Я написал следующее условие, которое я использую в файле .htaccess для перенаправления любого домена без «www», это работает для любого доменного имени. Внешний вид домена можно было бы сделать более комплексным, например, я ищу только числа, буквы и подчеркивание в имени домена, поскольку я знаю, что все домены, к которым будет применяться это правило, будут иметь именно это, но вы можете легко заменить регулярное выражение на более сложный, если вам нужно.

  RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-_]*)\.([a-zA-Z0-9]{2,3})$ [NC]
  RewriteRule ^(.*)$ http://www.%1.%2/$3 [L,R=301]

предполагая, что все они собираются на один виртуальный хост, я бы сделал следующее:

<VirtualHost *:80>
   ServerName _default_:80
   Redirect / http://www.example.com/
</VirtualHost>

<VirtualHost *:80>
   ServerName www.example.com
   DocumentRoot /var/www/html/
</VirtualHost>

* ОБНОВИТЬ *

Может это вам поможет? Модуль Apache 2.4 mod_macro 1.2.1