web-dev-qa-db-fra.com

Supprimer la chaîne de requête de l'URL de redirection 301

J'ai des problèmes avec les redirections et je n'ai pas réussi à faire en sorte que cela fonctionne. Je veux faire le suivant

http://www.example.com/seasonal/christmas?p=15

rediriger vers

http://www.example.com/holiday-decor/christmas.html

Je me demandais si quelqu'un pourrait m'aider avec la règle de réécriture afin que la chaîne de requête n'apparaisse pas dans l'URL redirigée. J'utilise . Htaccess avec un site de plate-forme Magento.

4
mrblo0m

Par défaut, la chaîne de requête sur l'URL demandée est ajoutée à l'URL réécrite/redirigée.

Sur Apache 2.4 +, vous devez utiliser le drapeau QSD (Query String Discard) de la directive RewriteRule pour ignorer la chaîne de requête de l'URL redirigée. Par exemple:

RewriteCond %{QUERY_STRING} =p=15
RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html [QSD,R=301,L]

La directive RewriteCond est requise pour faire correspondre la partie chaîne de requête de l'URL demandée. (L'URL correspondant au modèle RewriteRule est uniquement le chemin d'URL, ce qui exclut notamment la chaîne de requête.) Le préfixe = du CondPattern =p=15 indique une correspondance littérale "chaîne" (par opposition à une expression régulière), de sorte qu'elle corresponde exactement à p=15.

Sous Apache 2.2 et versions antérieures vous auriez plutôt besoin d'ajouter un ? à la fin de la substitution RewriteRule pour supprimer la chaîne de requête. Cela écrit essentiellement une chaîne de requête vide (le ? ne fait pas réellement partie de l'URL redirigée). Notez qu'en ajoutant toute chaîne de requête à la chaîne , vous écrasez la chaîne de requête dans la requête. (Si vous deviez également ajouter la chaîne de requête d'origine dans cette situation, vous avez besoin de l'indicateur QSA - Query String Append - mais sinon, cet indicateur n'est pas requis.)

Par exemple, sur Apache 2.2, vous modifierez la directive RewriteRule ci-dessus pour lire:

RewriteRule ^seasonal/christmas$ /holiday-decor/christmas.html? [R=301,L]

NB: Ajouter le ? fonctionne également sur Apache 2.4. Bien que l'utilisation de l'indicateur QSD soit préférable. Les deux méthodes ne sont pas identiques.

4
MrWhite