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

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.

решение1

Я бы предложил вам перенаправлять запросы, а не делать один и тот же сайт доступным в двух местах. Либо создайте новый 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]

решение2

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

ln -s yourdomain.com www.yourdomain.com

решение3

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

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

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

Затем вы можете использовать его %{SERVER_NAME}в своем правиле переписывания.

решение4

как я понял ваш вопрос, просто установите свойDocumentRootв нужный каталог:

DocumentRoot /var/www/domainName.com

Связанный контент