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

Apache2: попытка сопоставить поддомен с подкаталогом

Итак, в основном я хочу иметь: sub.domain.com/что-нибудь -> domain.com/asub/что-нибудь

Я немного новичок в этом и немного запутался. Первое, что я сделал, это сконфигурировал свои настройки DNS, чтобы sub.domain.com перешел на domain.com с помощью CNAME (лучше ли использовать запись A и IP?)

Затем я вошел в свой файл VirtualHost и получил:

RewriteEngine on

RewriteCond %{HTTP_HOST} www.(.+) [NC]
RewriteRule ^/(.*) http://domain.com/$1 [R]

RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^/(.*) http://domain.com/asub/$1 [R]

Итак, первое правило предназначено для работы с www. и убедитесь, что он правильно пойман и работает.

Второе правило - это то, что я добавил для сопоставления поддоменов, и похоже, что оно ничего не делает.

Поскольку у вас есть доступ к конфигурации apache, я бы посоветовал вам использовать отдельные хосты; это предотвращает зацикливание при перезаписи / перенаправлении.

Вы также должны экранировать любые специальные символы в соответствующем шаблоне. И правильно закрепите свои шаблоны!

<VirtualHost *:80>
  ServerName www.example.com
  ServerAlias sub.example.com

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

  RewriteCond %{HTTP_HOST} ^sub\.example\.com$
  RewriteRule ^/(.*) http://example.com/asub/$1 [R]
</VirtualHost>

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

Комментарий преднамеренный; в зависимости от того, хотите ли вы www. или суб. чтобы соответствовать любому запросу, не описанному здесь, закомментируйте другой, и он будет использоваться по умолчанию для somethingelse.example.com.