La réécriture d’URL .htaccess fonctionne, mais la barre d’adresse affiche alors une URL “sale”

  • Le lien de clic d’utilisateur (à partir de leur email): http://www.site.com/edit/wih293f73y
  • La fenêtre du navigateur s’ouvre et les amène à la bonne page.
  • Mais maintenant, la barre d’adresse du navigateur affiche: http://www.site.com/editor.php?editCode=wih293f73y

Informaitons supplémentaires:

  • Ma règle de réécriture est la suivante: RewriteRule ^edit/([A-Za-z0-9-]+)/?$ editor.php?editCode=$1 [NC,L]
  • Ce problème se produit SEULEMENT lorsque l’utilisateur a cliqué sur un lien. Cela fonctionne parfaitement lorsque vous tapez simplement la jolie URL dans la barre d’adresse.
  • Ce problème se produit UNIQUEMENT pour les liens qui incluent le www. – le lien http://site.com/edit/wih293f73y fonctionne comme un charme.
  • Mon fichier .htaccess inclut le code suivant (à partir de HTML5, que je ne connaissais pas auparavant):
 # Rewrite www.example.com → example.com  RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]  

Si c’est important, cela se produit après mes autres règles de réécriture.

Je viens de jeter un coup d’oeil et il est évident que vos règles www causent cela. Question est-ce que vous voulez qu’il soit réparé? Si vous le faites, déplacez cette règle par-dessus toutes les autres règles et votre problème devrait être résolu.

Déplacez ceci au dessus de toutes les autres règles

 RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] 

Vous pouvez utiliser la directive de redirection

redirect 301 ^ edit / ([A-Za-z0-9 -] +) /? $ editor.php? editCode = $ 1

Il y a des avantages et des inconvénients à cette stratégie. Les pros étant;

  • C’est super rapide. Vous n’avez même pas besoin de charger votre application pour que cela fonctionne.
  • C’est un code minimal.
  • Les redirections font partie intégrante d’Apache (ou de tout serveur http) et ne vont nulle part rapidement.

Le contre-être;

  • Cela ne fait pas partie de votre application proprement dite. Si vous décidez de changer de logique ou d’URL, vous devrez également le modifier.
  • Il est plus lent, car vous devez appeler php, par opposition à la simple redirection d’Apache.