Qu'est-ce que "ça" et "ces liens"? Quelles sont les (exemples d')URL parce que les règles L14/15 doivent sans doute en boucler, d'où, probablement la 500 (bien que tu aurais pu en trouver la raison exacte dans ton log d'erreur d'Apache). Le tout étant de clairement identifier ce qu'il faut réécrire ou non, les règles L14/15 devant sûrement être trop large au point d'englober ce vers quoi elles sont renvoyées. Est-ce que cadastre/$1/$2.html existent physiquement d'ailleurs ? Si c'est le cas, un premier fix serait d'exclure ce qui existe physiquement (RewriteCond %{REQUEST_FILENAME} !-f).
\.html est compris par le (.*)$ de la règle précédente donc elle ne sera jamais exécutée non plus (lignes 12/15).
> j'ai donc ajouté ceci car je veux juste ajouter .html à la fin
merci julp pour ta réponse rapide. j'ai toujours autant de mal avec le paramétrage serveur
les url sont comme suit: /cadastre-codePostal-ville ou /cadastre-codePostal-ville.html
mais il peut arriver qu on ait aussi : /cadastre/codePostal/ville ou /cadastre/codePostal/ville.html
les nom de ville peuvent avoir des tirets mais ni caractère spécial, ni espace, ni apostrophe en fait ces quatre url doivent etre reecrites pour acceder au fichier physique /cadastre/codePostal/ville.html
je dois en effet inverser les lignes 11 et 12 sachant que la 12 est plus précise que la 11 et sera donc jamais lue les fichiers sont générés statiquement donc oui, ces fichiers existent tous physiquement il faudrait, si d'aventure un des fichier n'existait pas (certaines villes ont plusieurs code postaux et ca peut générer une erreur de chemin), etre redirigé vers l'accueil mais normalement c'est déjà le cas
ps: dans le ca des url avec les tirets, ca fonctionne tres bien, mais pas pour les url avec les /
- Edité par lamouche42 17 février 2022 à 12:17:16
Souvent la moitié de la réponse se trouve dans une question bien posée.
> les fichiers sont générés statiquement donc oui, ces fichiers existent tous physiquement
> Est-ce que cadastre/$1/$2.html existent physiquement d'ailleurs ? Si c'est le cas, un premier fix serait d'exclure ce qui existe physiquement (RewriteCond %{REQUEST_FILENAME} !-f)
Voila un résultat, fruit de ce que tu m'as conseillé et qui fonctionne à 95% :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
# only for next generated static data json files
RewriteRule ^(.*)\.json - [L]
# rewrites rules for cadastre / plu files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^cadastre/([0-9]{5})/(.*) cadastre/$1/$2.html [L]
RewriteRule ^cadastre-([0-9]{5})-(.*)\.html$ cadastre/$1/$2.html [L]
RewriteRule ^cadastre-([0-9]{5})-(.*)$ cadastre/$1/$2.html [L]
# when refresh on generic cadastre page
RewriteCond %{REQUEST_FILENAME} cadastre/$
RewriteRule ^(.*)/$ $1.html [L]
</IfModule>
il couvre bien tous les cas de figure qu on peut rencontrer, seulement maintenant, si une url reecrite ne fonctionne pas, ca plante le serveur, alors qu avant ca retournait sur l'index.
exemple :
/cadastre-64100-bayonnee
on a :
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
alors qu' avec
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
# only for next generated static data json files
RewriteRule ^(.*)\.json - [L]
# rewrites rules for cadastre / plu files
RewriteRule ^cadastre-([0-9]{5})-(.*)\.html$ cadastre/$1/$2.html [L]
RewriteRule ^cadastre-([0-9]{5})-(.*)$ cadastre/$1/$2.html [L]
# when refresh on generic plu / cadastre page
RewriteCond %{REQUEST_FILENAME} cadastre/$
RewriteRule ^(.*)/$ $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /$1 [L]
</IfModule>
je n'ai pas ce message pour la meme url.
j'ai essayé de rajouter le dernier bloc pour tester si la nouvelle url existe, mais sans succes
si quelqu un peut me dire ou est la coquille, merci
Souvent la moitié de la réponse se trouve dans une question bien posée.
[Mon Apr 25 13:16:53.050932 2022] [core:error] [pid 681215:tid 140578675209984] [client 66.249.66.159:64363] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
je comprend la reecriture infinie, il ajoute .html à chaque fois, mais ca veut dire que pour chaque reecriture, il recommence au debut du .htaccess? (ca semble le cas si il boucle)
par cette regle, je veux juste rajouter .html si jamais l'utilisateur saisie l'url à la main sans le mettre
comment faire dans ce cas precis?
Souvent la moitié de la réponse se trouve dans une question bien posée.
Tu devrais ajouter Options -Multiviews au .htaccess et supprimer les IfModule (si le module de réécriture n'est vraiment pas disponible, tu l'as dans le baba de toute façon)
Ce serait, à mon avis, une bonne idée de faire une redirection surtout que ça risque d'être pris pour du duplicate content (plusieurs URL pour un même contenu).
sur la 1ere ligne la règle est testée et si il y a .html à la fin, on ne fait rien. le tag L suspend la poursuite du fichier, mais dans ta tres complete doc, tu dis que les rules avec le tag L sons soumises à réécriture (différent de END) ca stop la lecture courante et ca soumet de nouveau l'url au .htaccess?
Du coup, ne va t on pas être bloqué indéfiniment sur cette ligne? ou alors "ne rein faire" agit de façon particulière? En gros, comment vas elle lire la règle suivante si la règle du dessus est vrai?
Je viens de tester donc ça fonctionne merci, mais si tu pouvais m'aiguiller sur cette subtilité, ce serait cool
fichier final :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
# if url is with / and .html or not
RewriteRule ^cadastre/\d{5}/.+\.html$ - [L]
RewriteRule ^cadastre/(\d{5})/(.+) cadastre/$1/$2.html [L]
# if url is with - and .html or not
RewriteRule ^cadastre-(.*)-(.*)\.html$ cadastre/$1/$2.html [L]
RewriteRule ^cadastre-(.*)-(.*)$ cadastre/$1/$2.html [L]
# only for next generated static data json files
# RewriteRule ^(.*)\.json - [L]
# rewrites rules for commune files
RewriteRule ^ma-commune$ commune.html [L]
# when refresh on generic cadastre page
RewriteCond %{REQUEST_FILENAME} cadastre/$
RewriteRule ^(.*)/$ $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /$1 [L]
</IfModule>
je pense d'ailleurs que je peux virer les dernières lignes qui servent à rien
Souvent la moitié de la réponse se trouve dans une question bien posée.
> tu dis que les rules avec le tag L sont soumises à réécriture (différent de END) ça stoppe la lecture courante et ça soumet de nouveau l'url au .htaccess ?
Admettons que le chemin est cadastre-00000/truc.html (= finit par .html), à l'issue d'un premier processus de réécriture, il trouve donc la règle RewriteRule ^cadastre/\d{5}/.+\.html$ - [L] qui correspond et lui indique de ne rien faire (-). Du fait du flag L(ast), la suite (les autres règles/RewriteRule) ne sont pas considérées. Comme il a été indiqué à Apache de ne rien faire (pas de nouvelle URL à appliquer, toujours via le -), il n'y aura donc pas de deuxième processus de réécriture et ça ne créera pas de boucle infinie.
Souvent la moitié de la réponse se trouve dans une question bien posée.
probleme de rewriterule htaccess
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli