Добавить www в домен, но не для определенного домена

У меня есть следующий код в моем .htaccess файл:

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

Код выше для добавления www в домен, если он не имеет www, Но у меня есть домен, как: myloadbalancername-432566808.us-west-1.elb.amazonaws.com (DNS от AWS Elastic Load Balancer) и этот домен не работает с www, Итак, как я могу добавить www для всех запросов домена, кроме конкретного домена?

RewriteCond %{REQUEST_URI} !myloadbalancername
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Я попытался с кодом выше, чтобы проверить, если доменное имя не имеет слова, а затем проверить, если домен не имеет www, но безуспешно. Я начинающий с .htaccess так что я не знаю, что я делаю не так.

1 ответ

Решение

Как и с вашим другим состоянием, проверка на наличие www в хосте, вы должны проверить HTTP_HOST опять переменная сервера, а не REQUEST_URI - который содержит только URL-путь.

Попробуйте следующее:

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

Я также добавил начало привязки строки (^), поэтому он потерпит неудачу быстрее, если произойдет сбой (более эффективно), вместо того, чтобы искать "myloadbalancername" где-нибудь в строке хоста. Кроме того, нет необходимости включать якоря, если вы захватываете весь шаблон (например, ^(.*)$ такой же как (.*)).

Очистите любой промежуточный кэш (ы) перед тестированием, так как любые ошибочные 301 будут кэшироваться браузером.

Другие вопросы по тегам