Migration et url rewriting

Bonjour,

Je me permets de vous contacter car j'ai passé une bonne partie de ma matinée à chercher comment modifier le .htaccess afin de rediriger mes anciennes url vers les nouvelles de pluxml et je sèche. Il doit y avoir quelque chose qui m'échapppe.
Je suis passé d'url du type http://www.monsite.com/presentation.php à http://www.monsite.com/static2/presentation

Voilà ce que j'ai essayé (entre plein d'autres tests)
[== Indéfini ==]
# BEGIN -- Pluxml
Options -Multiviews
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteRule ^presentation\.php$ static2/presentation [R=301]
RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
</IfModule>
<Files "version">
	Order allow,deny
	Deny from all
</Files>
# END -- Pluxml

Selon les tests, ou il me dit que mon article n'existe pas ou il me fait complètement sauter tout (css, images), je n'ai plus que le HTML et il ne trouve quand même pas ma page statique.

Quelqu'un aurait une idée ?

Réponses

  • Bon et bien j'en ai remis une couche tout à l'heure et j'ai décoincé "le truc".
    En fait c'était un problème d'ordre dans mes règles. En regardant les logs d'apache, j'ai vu des choses bizarres, j'ai mis mes règles avant celle de PluXml et ça marche !

    Donc pour vos redirections mettez les directement après RewriteBase /
    [== Indéfini ==]
    ...
    RewriteEngine on
    RewriteBase /
    RewriteRule ^presentation\.php index.php?static2-presentation [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    ...
    

    http://www.monsite.com/presentation.php se ré-écrit bien en http://www.monsite.com/static2/presentation :cool:

    Après tests, le problème venait des 3 conditions, mais je ne sais pas pourquoi ...
    J'ai bien été voir la signification, mais je ne comprends toujours pas pourquoi ça bloquait. Si quelqu'un peut expliquer :rolleyes:

    Merci :)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Nexion

    Je n'ai pas vraiment d'explication à te donner, juste te confirmer que dans mon htaccess j'ai également des règles de réécritures d'url et c'est dans le même ordre que toi: après RewriteBase /

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • D'accord mais ces conditions qui testent s'il ne s'agit pas d'un fichier, dossier ou lien elles servent à quoi ?
    Dans mon cas, ça "match", mais et après ? Il y a un truc que je ne comprends pas, c'est peut-être une spécificité PluXml vu qu'il fonctionne avec des fichiers ?
  • Jerry WhamJerry Wham Member
    juillet 2014 modifié
    C'est dû aux flags qui sont présents après RewriteCond %{REQUEST_FILENAME} qui font que la réécriture ne s'applique que si les 3 conditions sont respectées, à savoir que l'url ne mène pas vers un fichier (!-f), un dossier (!-d) ou un lien symbolique(!-l) existant (voir http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteCond).

    Ici ton fichier présentation.php existe. Donc la condition RewriteCond %{REQUEST_FILENAME} !-f n'est pas respectée. Donc il n'y a pas de réécriture.

    Par contre, si tu mets directement RewriteRule ^presentation\.php index.php?static2-presentation [R=301,L] avant le test de condition, la réécriture se fera quoi qu'il arrive car les conditions ne seront testées pas après le flag L de [R=301,L].
    doc Apache a écrit:
    last|L Arrête le processus de réécriture immédiatement et n'applique plus aucune règle. Prêtez une attention particulière aux mises en garde concernant les contextes de niveau répertoire et .htaccess (voir aussi le drapeau END). détails ...
    (voir http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteRule)
  • Bonjour et merci pour ta réponse.

    C'est effectivement ce que j'avais compris, sauf que dans mon cas le fichier presentation.php n'existe pas non plus.
    Le but de ma manipulation est de ne pas faire perdre le référencement des pages qui existaient avant, ni les marque pages éventuels des visiteurs.

    C'est bizarre et c'est pour ça que je voulais comprendre car quand je mets ma règle après, PluXml à l'air de faire tout sauter étant donné que je n'ai même plus les images et css qui s'affichent.
Connectez-vous ou Inscrivez-vous pour répondre.