Добавьте 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 , так что я не Не знаю, что делаю не так.

0
задан 9 December 2016 в 01:10
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 будут кэшированы браузером.

2
ответ дан 4 December 2019 в 13:37

Теги

Похожие вопросы