2010-08-30 22 views
-2

Réécrit mon URL. Cependant, je peux toujours accéder aux urls réécrites avec des points d'interrogation et des signes plus.Besoin de remanier les points d'interrogation et les signes égal dans l'URL

lovelakedistrict.com/lake-district-cottages/?cottages=2/ 
lovelakedistrict.com/lake-district-cottages/?cottages/2/ 
lovelakedistrict.com/lake-district-cottages/cottages/2/ 

Les trois urls sont au-dessus exactement la même page, je voudrais les réécrire correctement afin qu'ils redirigent à la structure correcte (la dernière url) pour arrêter la duplication des pages Web.

Options +FollowSymlinks 
Options +Indexes 
RewriteEngine on 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^.#?\ ]+)\.php([#?][^\ ]*)?\ HTTP/ 

RewriteCond %1 !^include/ 
RewriteRule ^([^.]+)\.php$ /$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

RewriteRule ^lake-district-cottages/cottages/([0-9]+) lake-district-cottages.php?cottages=$1 

Répondre

2

Essayez ces règles:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*(&+(.*))$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/?%3 [N] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/?%4 [L,R=301] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*=/*([^&]*[^&/])/*(&+(.*))$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/%2/?%4 [N] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*=/*([^&]*[^&/])/*$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/%2/? [L,R=301] 

Mais je pense que le plus simple serait d'utiliser un langage plus puissant que mod_rewrite comme PHP:

$parts = explode('?', $_SERVER['REQUEST_URI'], 2); 
if (count($parts) === 2) { 
    $path = rtrim($parts[0], '/'); 
    parse_str($parts[1], $params); 
    foreach ($params as $key => $value) { 
     $path .= '/' . (($value === '') ? trim($key, '/') : trim($key, '/') . '/' . trim($value, '/')); 
    } 
    header('Location: http://example.com'.$path.'/', true, 301); 
    exit; 
} 
+0

les règles de htacccess fonctionnent bien à part quand J'essaie ceci par exemple http://www.lovelakedistrict.com/lake-district-cottages/?cottages=2/ il dirige à http://www.lovelakedistrict.com/ lake-district-cottages.php/cottages/2/ (ajoute sur l'extension php) - cela peut-il être supprimé? merci pour votre réponse rapide – AJFMEDIA

+0

@ajfmedia: Cela peut être dû à la commande que vous utilisez ces règles. Assurez-vous de mettre ces règles, qui provoquent une redirection externe, avant ces règles, qui provoquent juste une redirection interne. – Gumbo

+0

son ok son trié maintenant :) merci beaucoup – AJFMEDIA