Помогите с mod_rewrite и mod_redirect - PullRequest
       1

Помогите с mod_rewrite и mod_redirect

0 голосов
/ 12 октября 2010

Мой файл .htaccess:

Redirect 301    http://domain.com/news/articles?dtMain_start=150    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=160    http://domain.com/news/articles
Redirect 301    http://domain.com/news/articles?dtMain_start=170    http://domain.com/news/articles
# 
RewriteEngine On
RewriteBase /

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Я также должен включить следующее правило

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

Я не могу заставить их работать вместе ... может кто-нибудь помочь ...

Я попытался просто сложить Redirects перед RewriteCond, и я получил это ... http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
т.е. http://domain.com/newpage?q=oldpage

Хорошо, Mod_Alias ​​и Mod_Rewrite не любят друг друга.

Могу ли я написать что-то вроде:

RewriteCond %{REQUEST_QUERY_STRING} ^.*&bodgeredirect=true$
RewriteRule ^(.*)&bodgeredirect=true$ index.php?q=$1 [L,QSA]

1 Ответ

1 голос
/ 12 октября 2010

Прежде всего: Не существует mod_redirect. Redirect - это директива mod_alias.

И директива Redirect, как и любая другая директиваиз mod_alias, работает только с путем URL.Таким образом, ваши Redirect директивы не будут работать должным образом.Вместо этого используйте эквиваленты mod_rewrite:

RewriteCond %{HTTP_HOST} =example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{QUERY_STRING} ^dtMain_start=(150|160|170)$
RewriteRule ^news/articles$ /news/articles? [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

В общем случае не рекомендуется смешивать mod_alias и mod_rewrite, если шаблоны совпадают друг с другом.

...