.htaccess RewriteRule без www на www без четкого указания домена - PullRequest
2 голосов
/ 16 августа 2010

Я пытаюсь создать общее правило переписывания, чтобы перенаправить все запросы domain.com на www.domain.com.

RewriteCond %{HTTP_HOST} ^([0-9a-z-]+)\.([0-9a-z-]+])$ [NC]
RewriteRule ^(.*)$ http://www.{HTTP_HOST}/$1 [R=301,L]

Проблема в том, что это правило переписывания ничего не соответствует. Как я могу это изменить? Спасибо

1 Ответ

2 голосов
/ 17 августа 2010

Полагаю, проблема в том, что в вашем шаблоне RewriteCond есть дополнительный ] и что при ссылке на HTTP_HOST в замене RewriteRule отсутствует %. Так что попробуйте:

RewriteCond %{HTTP_HOST} ^([0-9a-z-]+)\.([0-9a-z-]+)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

И, чтобы немного затронуть проблемы Кэгса, вы также можете попробовать это правило:

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