2010-08-16 3 views
2

Я пытаюсь сделать общее правило перезаписи для перенаправления всех запросов domain.com на www.domain.com..htaccess RewriteRule не-www на www без объяснения причин, указывающих домен

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

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

+0

Это не особенно простая задача из-за структуры, которая может принимать URL-адреса. Очевидно, что код, который у вас есть, будет только получать TLD, у которых есть одна точка, такая как .com, .info, .org и т. Д., И не будет забирать .co.uk и так далее. Сделав это более динамичным, хотя трудно подобрать другие субдомены. Лучше всего использовать чередование, чтобы указать TLD для поддержки i.e. \. (Com | co \ .uk | org), хотя это, очевидно, не совсем динамично. –

ответ

2

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

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

А для покрытия, касается Cags’ Литт немного, вы можете попробовать это правило:

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

спасибо, это решение – Derk

Смежные вопросы