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

Проблема с конфигурацией Apache2 vhost

Я бы хотел, чтобы apache соответствовал каждому запросу для example.com и перенаправлял его на www.example.com. Любые другие хосты, отправленные браузером, которые не находятся в этом домене, должны возвращать 404.

Вот два моих хоста:

example.com:

<VirtualHost *>
    ServerAdmin webmaster@example.com
    ServerName www.example.com
    ServerAlias *.example.com

    DocumentRoot /var/www/example.com/

    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^.*example\.com$ [NC]
    RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

000-по умолчанию:

<VirtualHost *>
    Redirect 404 /
</VirtualHost>

На самом деле происходит следующее: «www.example.com» обслуживается должным образом, заголовок хоста «test» получает 404-й адрес, как и должен, а «example.com» - 404-й, и не должен т.

Это похоже на то, что apache сопоставляет «www» с директивой ServerName, но ServerAlias ​​игнорируется, а субдомен «sub» вместо этого соответствует vhost по умолчанию.

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

Сделаем исправление вашего www / non-www материала.

Затем для любых других хостов просто укажите свой виртуальный хост по умолчанию на какой-то пустой корневой каталог документов (или какой-нибудь скрипт, который обрабатывает любой пользовательский 404, который вы хотите.

с помощью

ServerName example.com
ServerAlias *.example.com

Я получаю перенаправление с не www на www, но только example.com возвращает 404

Вам нужно добавить example.com в строку ServerAlias:

ServerAlias example.com *.example.com

А затем перепишите свой RewriteCond следующим образом:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

... потому что я не думаю, что вам нужна первая строка% {HTTP_HOST}.