reecriture et redirection d'url

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : reecriture et redirection d'url

Re: reecriture et redirection d'url

par enneite » 18 févr. 2010, 12:05

bah à priori c'est la location qui pose problème et pas le statut, j'ai essayé avec 410 et aussi sans préciser le statut, le problème reste le même.
Du coup, je m'adapte avec le JS, qui reste dans mon cas du coup la moins pire des solutions.
De toutes façons ces anciennes urls vont être amenées à disparaitre petit à petit.

Re: reecriture et redirection d'url

par Victor BRITO » 18 févr. 2010, 11:47

Pour le référencement, les redirections en JavaScript sont à proscrire.

Si la redirection 301 pose problème, tu peux envoyer à la place une erreur 410.
if (strpos ($_SERVER['REQUEST_URI'], '/formations/reprise_dentreprise.php') !== false)
{
  header ('Status: 410 Gone', false, 410);
}

Re: reecriture et redirection d'url

par enneite » 18 févr. 2010, 11:14

Salut Victor, j'ai suivi ton conseil, malheureusement cela n'a pas améliorer mon problème.

Du coup je fais la redirection en javascript :

Code : Tout sélectionner

<script> //SCRIPT POUR REDIRIGER SUR LA BONNE PAGE //on le fait en JS en non en PHP car il y a des pbms de reidrection via la fnct header() de php sur certains var monurl=document.location.href; var monuri="/formations/reprise_dentreprise.php"; if(monurl.indexOf(monuri)>-1) document.location="../formation-reprise-transmission"; </script>
La cela fonctionne quelque soit le navigateur.

C'est marrant que ce soit le script PHP (coté serveur) qui fonctionne plus ou moins bien selon le type de navigateur alors que le code javascript (coté client) fonctionne partout.

Et pour ceux qui utilisent firefox ou chrome avec le JS désactivé?
Bah s'ils arrive sur cette page via une source externe au site, ils arriveront sur des pages avec quelques liens corrompus!
(cela ne devrait durer, pour la plupart des cas, que le temps que les moteurs réindexent les nouvelles urls)

Mais si quelqu'un connait la réponse du "pourquoi le code utilisant la fonction header() fonctionne ou non, selon le type de navigateur?" , je suis preneur.

Re: reecriture et redirection d'url

par Victor BRITO » 17 févr. 2010, 21:49

Pour les redirections 301 en PHP, je te conseille d'indiquer l'URL absolue (autrement dit, l'URL complète) dans le header Location.

reecriture et redirection d'url

par enneite » 17 févr. 2010, 19:34

Bon alors, j'ai un lien qui change, parce qu'on met dessus une réécriture d'url grâce au .htaccess.

Code : Tout sélectionner

# FORMATION ACCUEIL RewriteRule ^formation-reprise-transmission$ formations/reprise_dentreprise.php [L]
(ancien lien : formations/reprise_dentreprise.php )
(nouveau lien : formation-reprise-transmission)

Les réécriture d'url se passent bien.
J'ai mis à jour tous les liens pour lesquels j'ai la main. Cela fonctionne.

Il me reste cependant à gérer les liens sur lesquels je n'ai pas la main (anciennes newsletter, indexation google...)

Je veux que les anciens liens puissent être redirigés sur les nouveaux.
Du coup en tete du fichier php correspondant à une page j'ai le code :
if(strpos($_SERVER["REQUEST_URI"],"/formations/reprise_dentreprise.php")!==false)
{
	header("Status: 301 Moved Permanently", false, 301);
	header("location:../formation-reprise-transmission");
}

Le truc, c'est que sous IE et opéra, cela marche bien, alors que sous firefox et google chrome, les lenteurs sont telles que je tombe sur un fatal error (temps d'execution trop long)
à priori, je ne vois pas en quoi ma modification dépend du type de navigateur...(surtout qu'en developpement, cela marchait bien aussi sur chrome et FF)

Alors bien sur, c'est un peu tiré par les cheveux, puisqu'on redirige la page de départ via un entête http sur une page fictive qui elle même sera interprétée comme la page de départ via un "rewriterule"
mais quand même, je trouvais ça pratique car cela me permettait d'avoir un seul nom de page (ce qui m'évite de modifier du code pour des génération de liens relatifs notamment)

Si quelqu'un a une idée du pourquoi cela ne marche pas...