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

Apache Rewrite: как написать правило на основе имени домена (вместо HTTP_HOST)?

Я написал RewriteRule, который работает на основе HTTP_HOST (www.domainname.com), но я хочу, чтобы он работал только на основе части имени домена (domainname.com).

Чтобы уточнить дополнительно

Структура папок /var/www/domainName.com.

Когда я пишу это правило в файле конфигурации apache

RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]

и зайдите на сайт с помощью www.mydomain.com - он пытается найти папку /var/www/www.domainName.com, которого не существует.

Итак, мне нужно преобразовать вышеупомянутое правило, чтобы удалить «www» из HTTP_HOST.

Я бы посоветовал вам перенаправлять запросы, а не делать один и тот же сайт доступным в двух местах. Либо создайте новый VirtualHost для перенаправления трафика:

<VirtualHost *:80>
    ServerName www.domainName.com
    Redirect / http://domainName.com/
</VirtualHost>

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

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

Если вы действительно хотите, чтобы ваш сайт работал с обоими доменными именами без перенаправления, вы можете использовать RewriteCond для извлечения только имени домена, и оно будет доступно для RewriteRule как% 1.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]

Я сомневаюсь, что если вы сможете это сделать, не будет ли проще просто создать ссылки на соответствующие каталоги?

ln -s yourdomain.com www.yourdomain.com

Вы пробовали использовать %{DOCUMENT_ROOT}?

Также возможно, если вы установили Servername в вашем vhost на то же имя, которое вы используете в своей структуре каталогов, например:

<VirtualHost *:80>
  DocumentRoot /var/www/domainame.com
  ServerName domainame.com
  ServerAlias www.domainame.com
</VirtualHost>

Тогда вы можете использовать %{SERVER_NAME} в вашем правиле перезаписи.

как я понимаю ваш вопрос, просто задайте DocumentRoot в правый каталог:

DocumentRoot /var/www/domainName.com