В моем .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
поэтому я не знаю, что делаю не так.
Как и в случае с другим вашим состоянием, проверка наличия 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 будут кэшированы браузером.