L'UrlRewriting et ses petits tracas...
Bonjour à tous,
Dernièrement, mon hébergeur propose un accès TLS (HTTPS) avec un sympathique certificat... Moi, content, je force le trafic vers mon site via un htaccess. Ça fonctionne parfaitement, et puis...
...comme Pluxml c'est vachement bien fichu, j'en profites pour activer la réécriture d'url. Comme c'est sympa mais pas encore tout à fait à mon goût, je bricole un peu. Je fouille. Je me prend la tête, etc... pour améliorer encore les url. Inutile perte de temps : Pluxml est TRÈS BIEN FAIT. ll suffisait de trouver le plugin : MyBetterUrls. Youpi ! Décidément...
Sauf que... L'url rewriting c'est toujours le bazar à un moment donné. Je ne sais pas trop comment être le plus clair dans ce post. Prenons les choses une par une :
Mon premier HTACCESS pour forcer le HTTPS :
Jusqu'ici, tout va bien...
J'active la réécriture d'url, mon HTACCESS ressemble donc à ceci :
Et là, c'est le bug !!!
Premier "problème" :
J'ai deux ancres sur mon site (vers le bas de page / vers le haut de page). En activant la réécriture, les ancres ne fonctionnent plus... Notez une chose, ces ancres sont doté d'un petit effet de scroll en JS. Ça ressemble à ceci (l'appel vers la librairie JQUERY est ok) :
Et l'appel du bas vers le haut par exemple :
Quand le rewriting est activé, ça ne fonctionne plus du tout. J'ai bouffé quelques pages sur le sujet (ancres VS rewriting) mais rien de probant. Une idée ???
Autre petit problème (que j'ai su contourner, mais peut-être pas très "proprement").
Depuis l'activation de l'UrlRewriting via mon HTACCESS (voir plus haut), j'ai un bug. Une tentative d'accès au site via HTTP me donne une sympathique erreur 404. La redirection vers HTTPS ne se fait plus. A noter que, pour remédier au problème, j'ai mis en place une redirection dans index.php comme ceci (mais que j'eusse aimé comprendre le pourquoi que ça bug via HTACCESS :
Ce n'est pas évident d'être clair avec des trucs aussi complexe. Peut-être qu'un esprit illuminé sauras répondre à mes questions ?! Pas dans l'idée d'être pénible, c'est juste que je voudrais comprendre/apprendre... Au fond, mes ancres, je m'en moque. Quand à ma manière de rediriger HTTP vers HTTPS, elle semble fonctionner, alors... mais quand même ???!!!
Dernièrement, mon hébergeur propose un accès TLS (HTTPS) avec un sympathique certificat... Moi, content, je force le trafic vers mon site via un htaccess. Ça fonctionne parfaitement, et puis...
...comme Pluxml c'est vachement bien fichu, j'en profites pour activer la réécriture d'url. Comme c'est sympa mais pas encore tout à fait à mon goût, je bricole un peu. Je fouille. Je me prend la tête, etc... pour améliorer encore les url. Inutile perte de temps : Pluxml est TRÈS BIEN FAIT. ll suffisait de trouver le plugin : MyBetterUrls. Youpi ! Décidément...
Sauf que... L'url rewriting c'est toujours le bazar à un moment donné. Je ne sais pas trop comment être le plus clair dans ce post. Prenons les choses une par une :
Mon premier HTACCESS pour forcer le HTTPS :
[== Indéfini ==]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Jusqu'ici, tout va bien...
J'active la réécriture d'url, mon HTACCESS ressemble donc à ceci :
[== Indéfini ==]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# BEGIN -- Pluxml <-- ajout du Rewriting via admin Pluxml
Options -Multiviews
<IfModule mod_rewrite.c>
# RewriteEngine on <-- viré, car déjà actif
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
</IfModule>
# END -- Pluxml
Et là, c'est le bug !!!
Premier "problème" :
J'ai deux ancres sur mon site (vers le bas de page / vers le haut de page). En activant la réécriture, les ancres ne fonctionnent plus... Notez une chose, ces ancres sont doté d'un petit effet de scroll en JS. Ça ressemble à ceci (l'appel vers la librairie JQUERY est ok) :
[== JavaScript ==]
$(document).ready(function(){
$('a.scroll').on('click', function(evt){
evt.preventDefault();
var target = $(this).attr('href');
$('html, body')
.stop()
.animate({scrollTop: $(target).offset().top}, 1000 );
});
});
Et l'appel du bas vers le haut par exemple :
[== PHP ==]
<a href="#top" title="<?php $plxShow->lang('GOTO_TOP') ?>" class="scroll">Haut de page</a>
<script type="text/javascript" src="<?php $plxShow->template(); ?>/js/scroll.js"></script>
Quand le rewriting est activé, ça ne fonctionne plus du tout. J'ai bouffé quelques pages sur le sujet (ancres VS rewriting) mais rien de probant. Une idée ???
Autre petit problème (que j'ai su contourner, mais peut-être pas très "proprement").
Depuis l'activation de l'UrlRewriting via mon HTACCESS (voir plus haut), j'ai un bug. Une tentative d'accès au site via HTTP me donne une sympathique erreur 404. La redirection vers HTTPS ne se fait plus. A noter que, pour remédier au problème, j'ai mis en place une redirection dans index.php comme ceci (mais que j'eusse aimé comprendre le pourquoi que ça bug via HTACCESS :
[== PHP ==]
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
Ce n'est pas évident d'être clair avec des trucs aussi complexe. Peut-être qu'un esprit illuminé sauras répondre à mes questions ?! Pas dans l'idée d'être pénible, c'est juste que je voudrais comprendre/apprendre... Au fond, mes ancres, je m'en moque. Quand à ma manière de rediriger HTTP vers HTTPS, elle semble fonctionner, alors... mais quand même ???!!!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour commencer pour procéder par étape, il y a un bug identifié dans la réécriture d'url
J'en parle ici et je donne la solution pour le résoudre
https://github.com/pluxml/PluXml/issues/174
Peux-tu appliquer le correctif stp. ça sera déjà la 1ere étape.
Merci
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
Le correctif fonctionne parfaitement : mes ancres marchent à merveilles maintenant. Je n'aurais jamais pu trouver cette solution moi-même !