Итак, в основном я хочу иметь: 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.