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