Поэтому я использую следующую схему для обработки нескольких сайтов на моем apache:
<VirtualHost 192.168.1.100:80>
# get the server name from the Host: header
UseCanonicalName Off
VirtualDocumentRoot /var/www/%0/docs
VirtualScriptAlias /var/www/%0/cgi-bin
</VirtualHost>
Следовательно, если клиент перейдет на www.example.com, он фактически укажет на /var/www/www.example.com/doc/, что хорошо. Однако что, если клиент перейдет на example.com? Он будет указывать на /var/www/example.com/doc, что нам не нужно.
Итак, мой вопрос: есть ли для этого лучшая схема? Или что мне делать, чтобы исправить проблему?
Это зависит от того, какое поведение вы хотите увидеть.
Если вы хотите www.example.com
сайт будет перенаправлен на example.com
или наоборот, это можно реализовать в RewriteRule
настройки. Например (они входят в ваш <VirtualHost>
):
# Send www.example.com to example.com
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^/(.*)$ http://example.com/$1 [R=301,L]
# Send www.other.example.com to other.example.com
RewriteCond %{HTTP_HOST} ^www\.other\.example\.com$ [NC]
RewriteRule ^/(.*)$ http://other.example.com/$1 [R=301,L]
Чтобы выбить www
от каждого имени:
RewriteCond ${HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
Если вы хотите обслуживать контент для обоих имен, у вас есть несколько вариантов.
Если у вас когда-либо будет довольно простой набор доменов, измените созданный docroot, чтобы не заботиться о www
.
VirtualDocumentRoot /var/www/%-2/docs
... который указывает на docroot по адресу /var/www/example/docs
.
Если вам нужно проявить немного больше творчества с субдоменами (например, иметь b.example.com
и www.b.example.com
указывают на их собственный сайт, а не на example.com
one), символические ссылки могут быть хорошим подходом.
Options +FollowSymLinks
... и создайте символическую ссылку на /var/www/www.example.com
указывая на каталог в /var/www/example.com
.