2010-10-12 6 views
0

Mon fichier .htaccess est:Aide mod_rewrite et mod_redirect

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] 

Je dois aussi incorporer la règle suivante

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

Je ne peux pas les amener à travailler ensemble ... quelqu'un peut-il aider. ..

J'ai essayé simplement empiler les Redirects avant la RewriteCond et je reçois ce ... http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
-à-dire http://domain.com/newpage?q=oldpage

Ok Mod_Alias ​​et Mod_Rewrite ne s'aiment pas.

Puis-je écrire quelque chose comme:

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

Répondre

1

d'abord: There is not mod_redirect.Redirect est une directive de mod_alias.

Et la directive Redirect, comme toute autre directive de mod_alias, ne fonctionne qu'avec le chemin de l'URL. Ainsi, vos directives Redirect ne fonctionneront pas comme prévu. Utilisez les équivalents mod_rewrite à la place:

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] 

En général, il est pas une bonne idée de mélanger mod_alias et mod_rewrite si les motifs coïncident les uns avec les autres.

+0

Merci. Mon mauvais sur malentendu la source de la redirection. J'ai reçu 500 redirections ou plus dans le format ci-dessus à partir d'une agence de référencement. J'ai réalisé que mon problème était qu'il y avait des espaces supplémentaires et des caractères illégaux au lieu d'être codés en URL. Puis-je simplement vider toutes les redirections avant mes RewriteConds? – Simon

+0

@Simon: Puisque les directives 'Redirect' mentionnées ne fonctionnent pas de toute façon, oui. – Gumbo

+0

@Simon: Oh, et aussi vider votre agence de référencement. ;) – Gumbo