У меня есть выделенный сервер с Apache, на котором я настроил несколько виртуальных хостов. Я настроил один для обработки домена www, а также домена не www.
Мой VH .conf файл для www:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
С этим .htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Есть ли простой способ перенаправить www на версию без www? В настоящее время я отправляю обе версии на одну DocumentRoot
и ту же версию и использую, .htaccess
но я уверен, что смогу сделать это в файле VirtualHost.
apache-2.2
mod-rewrite
redirect
virtualhost
DisgruntledGoat
источник
источник
Ответы:
Оказывается,
mod_rewrite
в файле VirtualHosts все нормально, кромеRewriteBase
правила. Я закончил с этим:РЕДАКТИРОВАТЬ: по совету Joschi в комментариях, я сейчас использую эту упрощенную версию, используя
Redirect
директиву изmod_alias
:источник
:80
после,VirtualHost *
приводит к тому, что все возвращает «Запрещено»!Будьте очень осторожны с перенаправлениями 301, потому что по умолчанию браузер, который получает перенаправление 301, будет сохранять его постоянно - это означает, что вы потеряете контроль над тем, что этот браузер увидит, когда он попытается получить доступ к домену
www.example.com
.Смотрите, например, это обсуждение http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
Так что либо убедитесь, что он не кэшируется, либо используйте mod_proxy (я рекомендую mod_proxy).
Если вы можете позволить пользователю увидеть изменение URL в адресной строке браузера, используйте mod_rewrite:
Если вы хотите, чтобы «перенаправление» было невидимым для пользователя, используйте mod_proxy:
Следует отметить, что mod_proxy, если он плохо настроен, может нанести вред вашей сети.
источник
Вы можете добавить
ServerAlias example.com
к,VirtualHost
но производительность будет отличаться от перенаправления.редактировать
Поскольку вы хотите перенаправить и вам не нужны расширенные функциональные возможности, вам кажется, что использование
Redirect
должно быть достаточным для вас. Вы бы поместилиRedirect
под директивой VirtualHost.Решением на стороне клиента будет использование
meta refresh
тега.источник
www.example.com
наexample.com
использование этого метода?ServerName
иServerAlias
. У одного есть example.com, а у другого - www.example.com. Затем обе записи DNS получат доступ к документам, указанным в одном и том же vhost.ну, вы можете создать один виртуальный хост для SERVERNAME www.example.com и перенаправить его на другой виртуальный хост с помощью servername example.com
источник