web-dev-qa-db-fra.com

Apache 301 Rediriger et préserver les données de publication

J'ai implémenté des URL SEO en utilisant des redirections Apache 301 vers un `` redirect.cfm '' à la racine du site Web qui gère la création d'URL et la livraison de contenu.

Les données de publication sont perdues lors d'une redirection 301.

Incapable de trouver une solution jusqu'à présent, nous avons essayé d'exclure la méthode de publication des réécritures - dans le pire des cas, nous pourrions utiliser les URL de type ancien pour les méthodes de publication.

Peut-on faire quelque chose?

Merci

24
Daniel Cook

Les données POST sont rejetées lors de la redirection car un client exécutera une demande GET vers l'URL spécifiée par le 301. Période.

La seule option consiste à convertir les paramètres POST en paramètres GET et à les coller à la fin de l'URL vers laquelle vous redirigez. Cela ne peut pas être fait dans une réécriture du fichier .htaccess.

Une option consiste à attraper POST demande à l'url d'être redirigé et le transmettre à une page pour gérer la redirection. Vous auriez besoin de faire la transposition des paramètres dans le code, puis émettez le rediriger l'en-tête avec le paramètre ajouté une nouvelle URL de cette façon.

Mise à jour: Comme indiqué dans les commentaires de cette réponse, si vous redirigez vers une autre URL en spécifiant POST et que l'URL est également accessible sans paramètres (ou les paramètres sont variables), vous devez spécifier un lien vers l'URL canonique de la page.

Dites le POST redirections de formulaire transposées à la ressource GET suivante:

   http://www.example.com/finalpage.php?form_data_1=123&form_data_2=666

Vous ajouteriez cet enregistrement de lien à la section d'en-tête de la page:

   <link rel="canonical" href="http://www.example.com/finalpage.php" />

Cela garantirait que toute la valeur SEO serait donnée à http://www.example.com/finalpage.php et éviterait des problèmes potentiels avec le contenu en double.

22
Ray

Utilisant un 307 devrait être exactement ce que vous voulez

307 Temporary Redirect (since HTTP/1.1)
In this case, the request should be repeated with another URI; however, future requests
should still use the original URI.[2] In contrast to how 302 was historically implemented,
the request method is not allowed to be changed when reissuing the original request. For
instance, a POST request should be repeated using another POST request

- Wikipedia

53
Hashbrown

L'utilisation de redirections 301 pour la réécriture générale d'URL n'est pas la solution. Il s'agit d'un problème de performances (en particulier pour les mobiles, mais aussi en général), car il double le nombre de demandes pour votre page.

Pensez à utiliser un outil de réécriture d'URL comme URLrewriteFilter ou Apache mod_rewrite De Tuckey.

Ce que Ray a dit est tout à fait vrai, ce n'est qu'un commentaire supplémentaire sur votre approche générale.

0
marc82ch