8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je souhaiterais obtenir les résultats suivants :

http://www.nomdusite.com/ = http://www.nomdusite.com/index.php
http://www.nomdusite.com/news/ = http://www.nomdusite.com/news/list.php

Est-il possible de gérer l'urlrewriting à partir d'un seul fichier access basé à la racine du site ?
Ou est-on obligé de créer un fichier .htaccess pour chaque sous répertoire ?

Voici ce que j'ai essayé, sans succès dès qu'il s'agit d'un sous-répertoire...

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^$ $1index.php [L] => OK
RewriteRule /news/^$ /news/list.php [L] => NG

Merci de votre aide et indulgence...
Modifié par yannneo (06 Aug 2010 - 15:55)
Salut,

yannneo a écrit :
Est-il possible de gérer l'urlrewriting à partir d'un seul fichier .htaccess basé à la racine du site ?
Ben c'est le cas généralement mais tout dépend de ce que tu veux faire.

Pour ta question tu ne fais pas de redirection dans le premier cas puisque http://www.nomdusite.com/ va par défaut correspondre à http://www.nomdusite.com/index.php

Dans le deuxième cas il suffit de placer un fichier .htaccess dans le répertoire news :
DirectoryIndex list.php
Bonjour Heyoan,

Je me suis mal exprimé Smiley lol ...
Je voulais simplement demander si l'on pouvait gérer les urlrewriting de tous les sous-répertoires à partir du fichier .htaccess de la racine su site.

Mais d'après ta réponse : [ ... il suffit de placer un fichier .htaccess dans le répertoire news ]
tu me confirmes qu'il faut bien placer un fichier .htaccess dans chaque sous-répertoire...

Encore merci pour ta réponse rapide.
Salut,

Attention, je pense que tu as mal interprété la réponse d'Heyoan ! Il n'est pas nécessaire de placer un fichier .htaccess dans chaque sous-dossier pour gérer l'URL rewriting de l'ensemble du site.

Heyoan t'a simplement donné une solution pour le problème particulier que tu as présenté dans ton premier post, qui ne nécessite pas vraiment d'utiliser l'url rewriting.

Pour revenir à la question initiale, un fichier .htaccess dans le dossier racine du site peut effectivement gérer l'ensemble du site. De plus, si tu utilise l'url rewriting, les urls ré-écrites ne correspondent pas forcément à un dossier existant sur le serveur, il est donc parfois impossible de placer un fichier .htaccess par répertoire...

C'est une matière un peu délicate, il vaut mieux bien réfléchir à ce qu'on va faire avant de se lancer. Pour une aide plus précise, il faut nous expliquer la structure de ton site dans son ensemble, et détailler les URLs que tu voudrais obtenir pour les différentes sections.
En complément j'ajouterais que dans ton cas bien précis il suffirait de renommer le fichier list.php en index.php pour régler la question. Si tu tiens pour une raison ou pour une autre à le garder tel quel tu pourrais également utiliser un .htaccess à la racine du site qui définirait de manière globale les fichiers d'index (par défaut index.php, index.html et index.htm) :
DirectoryIndex index.php index.html list.php bidule.php
Chaque document étant cherché tour à tour de gauche à droite.
Modifié par Heyoan (06 Aug 2010 - 14:11)
Salut,
yannneo a écrit :

RewriteRule ^$ $1index.php [L] => OK
RewriteRule /news/^$ /news/list.php [L] => NG

Ce que je vois surtout, c'est que tu as mis ton cas général avant ton cas particulier. Tu utilises le commutateur L qui fait que lorsque la règle est trouvée par le serveur, le traitement est arrêté.
Vu que tu veux rediriger la racine de ton répertoire news/ la première règle est vérifiée. Il me semble qu'il te suffit d'inverser l'ordre de tes règles pour que ça fonctionne correctement.
'lut Agylus,

Agylus a écrit :
Il me semble qu'il te suffit d'inverser l'ordre de tes règles pour que ça fonctionne correctement.
Ben je ne pense pas non. Ce serait plutôt quelque chose comme
RewriteRule ^news/$ news/list.php [L] 
et il me semble que la ligne avec index ne sert à rien (et au passage le $1 sans parenthèses capturantes est étrange).

Au-delà de ça pourquoi faire de l'urlrewriting quand ce n'est pas nécessaire ?
Salut tout le monde,

Merci pour toutes vos réponses.
Si j'avais demandé votre indulgence, c'est que vous en doutiez bien, je suis novice en la matière... Smiley lol

Sinon, pour vous confirmer :

- La solution de Heyoan est bien ce que je recherchais (qui n'est pas de l'urlrewriting Smiley confused ) :
DirectoryIndex index.php index.html list.php bidule.php


- La solution de Agylus (inversion) avec la correction de Heyoan Smiley cligne fonctionne aussi...

J'ai fais des essais avec cela et ça fonctionne :

RewriteRule ^news/$ news/list.php [L]
RewriteRule ^$ $1index.php [L]


Merci encore pour votre aide !
Grâce à vous, j'ai eu la réponse que j'attendais.
yannneo a écrit :
RewriteRule ^$ $1index.php [L]
Comme je disais cette ligne ne sert à rien et on utilise $1, $2, etc. pour passer en paramètre ce qui a été capturé entre parenthèses comme par exemple dans
#RewriteRule ^([a-zA-Z_]+)/([a-zA-Z_]+)/album_([0-9]+)\.html$	index.php?pays=$1&region=$2&id=$3	[L]


Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne