Я пытаюсь перенаправить несколько 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