Aller au contenu

Url Rewriting multipe et ordres d'execution


Sujets conseillés

Voilà,

1)

j'ai créé un blog (dotclear) que j'ai parametré en path info dans lequel je me suis arrangé afin de remplacer l'index.php par un repertoire fictif (donc sans ".php"du genre :

http://www.example.net/repertoire-fictif/etc...

Pour ceux qui connaissent dotclear j'ai tout simplement appliqué la manip décrite ici : Un dotclear proprement à la racine

mais j'ai gardé le "répertoire fictif" (malgré la possibilité de le supprimer complètement pour une url du type "http://www.example.net/etc.." trouvant que celà pouvait m'aider dans un futur referencement. mes urls basiques sont donc actuellement comme celle là : http://www.example.net/repertoire-fictif/etc

2)

De plus , j'ai du aussi rajouter une règle afin d'eviter le duplicate content lorsque je me suis aperçu que toutes mes urls étaient doubles en http://example.net/ et http://www.example.net/ pour au final forcer à garder les urls avec [b]http://www

3)

j'ai aussi du réécrire une règle afin que ma page d'accueil qui nativement avec la règle numéro 1 était du type : [b]http://www.example.net/repertoire-fictif/ soit réécrite en [b]http://www.example.net/ pour aussi éviter un duplicate content de la page d'accueil....

Le constat

c'est que actuellement je peux taper n'importe quoi après mon nom de domaine [b]http://www.example.net/n'importekoi ca redirige tout vers lapage d'accueil... plus d'erreur du type 404 c tout sur la page d'accueil... j'ai même d'ancien liens dans un autre format qui lorsqu'ils sont redirigés vers mon site sont renvoyés vers la page d'accueil. Est ce grave docteur pour google ?

Deuxieme probleme (plus important celui là je trouve) lorsque je tape dans ma barre d'adresse example.net/repertoire-fictif/etc... ou bien [color=green]http://example.net/repertoire-fictif/etc... au lieu de me donner [color=green]http://www.example.net/repertoire-fictif/etc... il me donne [color=green]http://www.example.net/repertoire-fictif.php/etc...

Il me rajoute bien [b]http://www à chaque fois (ca c'est cool) mais il ne me réécrit plus repertoire-fictif.php en répertoire fictif... pour exemple celà me donne : [color=green]http://www.example.net/repertoire-fictif.php/etc...

Je me dis après reflexion que celà doit venir de l'ordre chronologique de lecture du .htaccess

Si qqun a une idée je vous donne ci-joit le .htaccess en question :

RedirectMatch permanent ^/repertoire-fictif/$	http://www.example.net/
RewriteEngine On
RewriteCond %{REQUEST_URI} !(dotclear|repertoire-fictif)
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteRule ^(.*)$ /repertoire-fictif.php/$1 [L]
RewriteCond %{HTTP_HOST} !^www\.example\.net [NC]
RewriteRule ^(.*)$ http://www.example.net/$1 [QSA,R=301]

Merci au cas ou vous auriez une idée pour m'aider ! :unsure::)

je sais c'est la prise de tête ! :fou:

Lien vers le commentaire
Partager sur d’autres sites

Déjà tu devrais commencer par mettre la règle qui change éventuellement le domaine pour le www:

RewriteCond %{HTTP_HOST} !^www\.example\.net [NC]
RewriteRule ^(.*)$ http://www.example.net/$1 [QSA,R=301,L]

Et je ne suis pas sûr d'avoir compris le but du jeu de ton "repertoire-fictif" ... :wacko:

Si avec cette règle:

RewriteRule ^(.*)$ /repertoire-fictif.php/$1 [L]

tu rediriges tes URLs vers répertoire-fictif

avec celle-ci :

RedirectMatch permanent ^/repertoire-fictif/$ http://www.example.net/

tu renvoies tout ce qui est /repertoire-fictif/ vers la racine en passant par l'extérieur (avec le http://) donc en relisant le .htaccess et en appliquant les règles.

Donc tu reviens au cas de la règle précédente :wacko:

Dan

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Dan,

Merci,

effectivement c'est un peu la pagaille mon truc...

En fait tu as raison j'ai abandonné l'idée du redirectpermanent. Et de faire appraitre mon repertoire-virtuel, je me suis apercu en faisant un test d'un simulateur de robot que mes pages ne pouvaient pas être référencées.

je me retrouve donc uniquement avec la manip décrite dans le petit dotclear illustré à savoir

Copie de l'index à la racine :

On copie le fichier /dotclear/index.php à la racine, puis on décommente et on modifie la ligne qui va initialiser le $app_path au début de ce fichier pour qu'elle pointe sur le répertoire dans lequel on a installé DotClear : $app_path = '/dotclear/';. Ensuite, on va modifier dans la configuration l'URL vers le weblogue pour pointer vers /index.php/. Les adresses vont maintenant être celles-ci :

    * http://monsite.net/

    * http://monsite.net/index.php/Categorie

    * http://monsite.net/index.php/2005/05/05/42-post-titre

    (en QueryString : / comme URL, pour des adresses http://monsite.net/?Categorie, et on a fini.)

Déjà, c'est mieux. Mais diantre, que ce index.php est laid ...

Une plus jolie adresse de base.

Si votre serveur supporte vraiment le path_info et gère l'option Multiviews, il est possible de remplacer ce /index.php/ par quelque chose de plus joli, mettons blog par exemple. Pour ce faire, renommez index.php en blog.php, assurez vous d'activer l'options Multiviews dans votre .htaccess de la sorte :

Options +MultiViews

Puis allez modifier dans la configuration l'URL vers le weblogue pour pointer maintenant vers /blog/ ... Magie, vos pages sont maintenant accessibles aux adresses suivantes :

    * http://monsite.net/blog/

    * http://monsite.net/blog/Categorie

    * http://monsite.net/blog/2005/05/05/42-post-titre

C'est quand même plus joli. Ben oui, mais à http://monsite.net/, on n'a rien... On peut aller jusqu'au bout ?

À fond !

C'est maintenant qu'on s'amuse, en fignolant un petit .htaccess bien senti : on va réécrire les URLs à la vollée. Indiquons ça dans notre fichier par RewriteEngine On, puis allons réécrire les adresses, mais sous certaines conditions : il ne faut pas réécrire les adresses qui pointent réellement vers quelque chose, par exemple vers le répertoire /dotclear/, qui existe réellement. Comme on va tout rediriger vers le fichier blog.php, il faut éviter de rediriger celui-ci vers lui même; si on ne veut pas partir dans une boucle sans fin. Hormis ceux-là (et d'autres à votre convenance, on peut penser par exemple à un robots.txt), on redirige donc tout vers blog.php, ça donne ce .htaccess là :

RewriteEngine On

RewriteCond %{REQUEST_URI} !dotclear

RewriteCond %{REQUEST_URI} !blog

RewriteRule (.*)$ /blog.php/$1

Il ne reste plus qu'à faire pointer l'URL vers le weblogue vers / et on se retrouve avec les adresses suivantes :

    * http://monsite.net/

    * http://monsite.net/Categorie

    * http://monsite.net/2005/05/05/42-post-titre

Ton conseil de mettre la réécriture marche bien.

je te donne ci-joint le code que j'ai modifié :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.net [NC]
RewriteRule (.*) http://www.example.net/$1 [QSA,R=301,L]
RewriteCond %{REQUEST_URI} !(dotclear|blog)
RewriteRule ^(.*)$ /blog.php/$1 [L]

par rapport à l'exemple du dessus g mis "blog" au lieu de repertoire fictif pour une meilleure compréhension du problème.

Avec ce htaccess ca marche beaucoup mieux surtout le rajout dy flag [L] dans [QSA,R=301,L]

Le rajout de [b]http://www sans dénaturer le reste du lien est parfait pour toutes mes urls, MAIS sauf pour le cas du nom de domaine seul.

je m'explique : lorsque je tape dans ma barre d'adresse

example.net/

celà me réécrit :

http://www.example.net/blog.php/http://www.example.net//

chose qu'il ne me fait pas lorsque je tape dans la barre d'adresse :

example.net/sujet-du-billet

il applique bien la règle et me réécrit :

http://www.example.net/sujet-du-billet

Aurais tu un idée ? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...