J'essaie de faire la redirection suivante (301) en utilisant .htaccess
*? page = 1 redirige vers *
(où * est un caractère générique).
Fondamentalement, je veux simplement empêcher quiconque d'accéder à une page avec? Page = 1 à la fin de l'URL, et plutôt les diriger vers la même URL moins ?page=1
.
Existe-t-il un moyen rapide de procéder?
Cela devrait le faire:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
Ligne par ligne:
page=1
pour que les règles suivantes s'appliquent.Si vous souhaitez que la redirection soit temporaire (302), vous pouvez simplement supprimer le =permanent
partie. Déplacé temporairement est la valeur par défaut pour l'indicateur R
.
Vous pouvez également utiliser l'indicateur QSD (Query String Discard) pour rediriger quelque part sans passer la chaîne de requête.
Si vous êtes sur Apache 2.4 Vous pouvez simplement utiliser le QSD (indicateur Query String Discard) pour supprimer les chaînes de requête spécifiques de votre URL de destination.
Voici un exemple pour les utilisateurs d'Apache 2.4:
Ancienne URL: -/foo/bar /? Page = 1
nouvelle URL: -/foo/bar /
Code d'accès:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI} [L,R,QSD]
La règle ci-dessus redirigera tout uri avec ? Page = 1 pour supprimer les chaînes de requête. Cet exemple renverra 500 erreurs sur les versions Apache ci-dessous 2.4 car elles ne prennent pas en charge QSD.
Sur les versions inférieures d'Apache, vous pouvez utiliser un point d'interrogation vide ? à la fin de l'URL de destination pour supprimer les chaînes de requête.
Un exemple :
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]
L'exemple ci-dessus fonctionne presque sur toutes les versions d'Apache.
(J'espère que cela t'aides!)
Pour supprimer toute la chaîne de requête, cela suffira:
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]