2012-06-19 5 views
1

J'ai besoin de mettre à jour mon fichier .htaccess pour rediriger en permanence toutes les URL de http://example.com/pages/5604/article/something/?page=299 à http://example.com/pages/5604/article/. Voici ma mise en œuvre (ce qui ne fonctionne pas malheureusement):.htaccess 301 rediriger avec regex

RewriteRule ^pages/(.*)/(.*)/something/\?page=(.*) /pages/$1/$2 [R=301,L]

Merci d'avance pour votre aide et suggestions!

Répondre

2

Le QUERY_STRING n'est pas dans l'URL qui correspond, vous devrez faire correspondre cela séparément dans un RewriteCond. Quelque chose comme (non testé):

RewriteCond %{QUERY_STRING} ^page=(.*) 
# Apache >= 2.4 
RewriteRule ^pages/(.*)/(.*)/something/ /pages/$1/$2 [R=301,L,QSD] 
# Apache < 2.4 
RewriteRule ^pages/(.*)/(.*)/something/ /pages/$1/$2? [R=301,L] 

Si vous avez besoin de la valeur après page= dans votre RewriteRule, vous pouvez utiliser %1 de la même manière que vous utilisez $1 (matchs dans RewriteCond « s sont %N, dans RewriteRule$N)

+0

C'est un très bon début (Merci!), Mais il ajoute toujours '? Page = (. *)'. Comment puis-je me débarrasser de cela aussi? – eistrati

+0

Hm, c'est nouveau pour moi, mais le drapeau ['QSD'] (http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsd) semble être nécessaire, il a aussi appris quelque chose aujourd'hui; – Wrikken

+0

Oh, et si vous utilisez <2.4: ajoutez un '?' À la place. – Wrikken