Я написал 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