2013-10-25 12 views
1

Этот код работает отлично:Htaccess: перенаправление 301 не работает должным образом

RewriteEngine On 
RewriteBase /my/project/dir/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /my/project/dir/index.php?uri=$1 [QSA,L] 

Но сейчас я хотел бы, чтобы заставить www. в URL, чтобы избежать duplicate content (SEO). Я нашел этот код-фрагмент, но я не в состоянии интегрировать его в свой код:

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

Я попробовал несколько комбинаций, но я не хочу, чтобы сбить вас с толку. Ни один из них не работал.

Как бы вы распространили первые (рабочие) строки кода для достижения цели? Заранее спасибо!

+1

Что произойдет, если вы просто удалить 'RewriteEngine' из второго фрагмента и вставьте другие 2 строки сразу после' RewriteBase'? –

+0

@JoachimIsaksson Спасибо за ваш ответ. Я пробовал это раньше, результат: он игнорирует «RewriteBase». Когда я пытаюсь открыть 'domain.com/users/list/? Filter = 1', он перенаправляется на' www.domain.com? Filter = 1'. –

ответ

1

Изменить порядок правил и использовать %{REQUEST_URI} в 301 правиле:

RewriteEngine On 
RewriteBase /my/project/dir/ 

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule^http://www.domain.com%{REQUEST_URI} [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /my/project/dir/index.php?uri=$1 [QSA,L] 
Смежные вопросы