Help: je n' ai pas d'erreurs 404

WRInaute occasionnel
Bonjour,

J'ai dans mon htaccess les règles suivantes:

Code:
RewriteCond %{HTTP_HOST} ^example.com$ 
RewriteRule ^(.*)$   http://www.example.com/$1  [QSA,L,R=301]
RewriteRule ^p[0-9]{0,4} / [QSA,L]
RewriteRule ^[0-9]{4} / [QSA,L]
RewriteRule ^[A-Z][a-z]+ / [QSA,L]

Et il y a un truc qui ne fonctionne pas, dans le sens ou le serveur ne renvoi pas une 404 même si l'url est fausse.

Par exemple pour une bonne url:
-www.example.com/Categorie
Si on tape n'importe quoi à la fin:
-www.example.com/Categorie/nimportequoi
-www.example.com/Categorie/nimportequoi.html
-www.example.com/Categorie/nimportequoi.php
ça envoi la même page alors que ça ne devrait pas.

Je n'arrive pas à trouver comment faire.

Merci de votre aide
 
WRInaute impliqué
les régles ne fixent que ce qu'il doit y avoir au début, et indiquent que la fin importe peu, il faut donc ajouter un $ aux 3 dernières lignes, ainsi :
RewriteRule ^[A-Z][a-z]+$ / [QSA,L]
 
WRInaute occasionnel
Merci loubet pour ton aide.

Je viens de tester ta proposition:

Code:
RewriteRule ^p[0-9]{0,4}$ / [QSA,L]
RewriteRule ^[0-9]{4}$ / [QSA,L]
RewriteRule ^[A-Z][a-z]+$ / [QSA,L]

- ça fonctionne en effet sur les url de categories comme dans mon exemple,
sauf que
- si la categorie est formée de deux mots séparés par un tiret ça sort une 404
- ça mets tous les billets du blog en 404 :?

J'ai ensuite essayé de ne rajouter un $ que sur la 3ème ligne

Code:
RewriteRule ^[A-Z][a-z]+$ / [QSA,L]

La c'est ok pour les billets du blog mais reste le probème de la catégorie formée par plusieurs mots séparés par un tiret...

Une idée??

Merci encore
 
WRInaute impliqué
RewriteRule ^[A-Z][a-z-]+$ / [QSA,L]

exemple d'une url correcte d'un billet ?
exemple d'une url incorrecte d'un billet ?
 
WRInaute occasionnel
Ta dernière proposition fonctionne!

Merci Loubet, je cherchais depuis des mois...

Pour info les url des billets:
-www.example.com/2013/12/11/37-un-beau-billet

Une dernière chose me questionne: le soucis est réglé si on met un slash:
-www.example.com/Categorie/nimportequoi renvoi bien une 404
mais persiste lorsqu'on ajoute un ? et du texte
-www.example.com/Categorie?nimportequoi renvoi la page
 
WRInaute impliqué
-www.example.com/2013un-beau-billet va passer
si toutes les urls sont du style indiqué, alors quelque chose du style
^[0-9][0-9][0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]\/[0-9]+\-
sera plus restrictif

pour les paramètres
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]
 
WRInaute occasionnel
Bonjour Loubet,

Voilà où j'en suis:

Dans le code j'ai ça:

Code:
RewriteRule ^p[0-9]{0,4} / [QSA,L]
RewriteRule ^[0-9][0-9][0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]\/[0-9]+\- / [QSA,L]
RewriteRule ^[A-Z][a-z-]+$ / [QSA,L]
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]

Et le résultat sur les "mauvaises" url:

example.com/aa -> 404
example.com/?aa -> 200

example.com/Categorie/aa -> 404
example.com/Categorie?aa -> 200

example.com/2013/06/19/17-un-billet/aa -> 200
example.com/2013/06/19/17-un-billet?aa -> 200
 
WRInaute occasionnel
+ Edit tardif:
Je viens de me rendre compte que du coup ça bloque la pagination sur les catégories:

-www.example.com/Categorie/p2 -> 404 au lieu de 200

Si tu arrives à me démêler tout ça je t'envoie le Champagne :wink:
 
WRInaute impliqué
RewriteRule ^[A-Z][a-z-]+$ / [QSA,L]
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]

par
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+(\/p[0-9]+)?$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]
 
WRInaute occasionnel
Hello,

si je met ça:

Code:
RewriteRule ^p[0-9]{0,4} / [QSA,L]
RewriteRule ^[0-9][0-9][0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]\/[0-9]+\- / [QSA,L]
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+(\/p[0-9]+)?$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]

les pages catégories sont en 404

j'ai essayé ça:

Code:
RewriteRule ^p[0-9]{0,4} / [QSA,L]
RewriteRule ^[0-9][0-9][0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]\/[0-9]+\- / [QSA,L]
RewriteRule ^[A-Z][a-z-]+$ / [QSA,L]
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+(\/p[0-9]+)?$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]

et je retrouve la situation précédente citée dans mon billet ce matin
 
WRInaute occasionnel
Bonjour Loubet,

Plus le temps de chercher? Plus d'idées? On y était presque!! :wink:

A tout hasard si tu as du courage voilà où j'en suis.

J'ai ça:

Code:
RewriteRule ^p[0-9]{0,4} / [QSA,L]
RewriteRule ^[0-9][0-9][0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]\/[0-9]+\- / [QSA,L]
RewriteRule ^[A-Z][a-z-]+(\/p[0-9]+)?$ / [QSA,L]

Qui fonctionne presque à merveille:
- si on ajoute /nimportequoi à une url de catégorie on a une 404
- par contre si on l'ajoute à une url de billet on a une 200

Et puis j'ai ça:

Code:
RewriteCond %{REQUEST_URI} ^[A-Z][a-z-]+(\/p[0-9]+)?$
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) / [QSA,L]

qui a priori ne fonctionne pas:
si on ajoute ?nimportequoi à une url de cat ou de billet ça renvoi un code 200...
 
Discussions similaires
Haut