Aller au contenu

URL Rewriting


skale

Sujets conseillés

bonjour,

je viens de galérer une bonne heure à cause d'une règle d'URL Rewriting, pour finalement trouver une solution de remplacement que je ne comprends pas vraiment. C'est à y perdre des cheveux.

Si quelqu'un a une explication, merci d'avance.

Le but étant d'appeler la page suivante www.monsite.com/index.php?r=param1&a=param2 où param1 est un nombre et param2 des caractères avec un tiret possible.

Règle numéro 1, en passant l'URL suivante www.monsite.com/themes/param1/param2.xhtml :

RewriteRule ^themes/([0-9]+)/([a-zA-Z-]+)\.xhtml$ themes.php?r=$1&a=$2 [L]

ça marche pas

Règle numéro 2, en passant l'URL suivante www.monsite.com/themes-param1-param2.xhtml :

RewriteRule ^themes-([0-9]+)-([a-zA-Z-]+)\.xhtml$ themes.php?r=$1&a=$2 [L]

ça marche

Règle numéro 3, en passant l'URL suivante www.monsite.com/theme/param1/param2.xhtml :

RewriteRule ^theme/([0-9]+)/([a-zA-Z-]+)\.xhtml$ themes.php?r=$1&a=$2 [L]

ça marche

J'ai choisi la règle 3 car je veux garder l'idée de sous-répertoires. La règle 1 fonctionnait pourtant sur mon serveur mais pas chez mon hébergeur. Je ne comprends pas pourquoi themes avec s ne marche pas. Ai-je commis une erreur de syntaxe ?

Si quelqu'un peut aussi m'aider pour remplacer [0-9]+ par [:digit:] ou quelque chose dans le genre, c'est possible ?

Merci d'avance,

skale

Lien vers le commentaire
Partager sur d’autres sites

exact, j'avais lu ton post mais 2 mois se sont écoulés depuis et je n'ai pas fait le rapprochement. C'est le même problème. Quelqu'un depuis a bossé et a peut-être trouvé ? C'est quand-même dingue que ça marche avec des - et pas des / on peut effectivement penser à un bug, sinon il y a une réponse qui nous échappe quelquepart. Ou alors c'est une règle à appliquer, le nom du fichier appelé doit être différent du nom du répertoire.

Lien vers le commentaire
Partager sur d’autres sites

Question sans réponse, Dan (bon anniversaire), tu as forcément eu vent du pb, toi le spécialiste es urlrewriting 

:whistling: C'était le jour de son anniversaire, on peut lui laisser quelques jours de répi pendant cette période ? En rentrant de vacances il aura peut-être zappé le post. C'est pas son genre de ne pas répondre dans ce domaine.

Est-ce que vous avez épluché son article ? La réponse est peut-être tout simplement là ;)

Enfin, il devrait voir ce message maintenant. :gueule: Dan : Ils ont besoin de tes lumière ;)

Lien vers le commentaire
Partager sur d’autres sites

J'apporte une petite précision, parce que la règle 1 qui nous pose problème elle fonctionne sur une version d'Apache 1.3.27 qui tourne sous Windows, mais elle ne fonctionne pas sur une version d'Apache 1.3.3 qui tourne sous linux :blink:

Lien vers le commentaire
Partager sur d’autres sites

J'apporte une petite précision, parce que la règle 1 qui nous pose problème elle fonctionne sur une version d'Apache 1.3.27 qui tourne sous Windows, mais elle ne fonctionne pas sur une version d'Apache 1.3.3 qui tourne sous linux :blink:

Parce que sous linux, et selon la config du serveur, un fichier xyz demandé et inexistant forcera la lecture d'un fichier xyz.php ;)

Idem sur le Hub: http://www.webmaster-hub.com/index appelle index.php, et -http://www.webmaster-hub.com/home appelle home.php ;)

Donc avec le s, et comme ce fichier existe avec l'extension .php, c'est celui-ci qui est proposé ... c'est tout bête.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Donc avec le s, et comme ce fichier existe avec l'extension .php, c'est celui-ci qui est proposé ... c'est tout bête.

non avec la règle 1, aucun fichier n'est proposé, je reçois une erreur 404. En plus, le serveur semble configurer de telle façon, qu'il essaye de trouver d'abord un fichier xml (et il existe) avant le php donc www.monsite.com/themes va envoyer www.monsite.com/themes.xml

il y a autre chose

Lien vers le commentaire
Partager sur d’autres sites

Pourtant c'est bien le fait que themes soit suivi d'un / et donc considéré comme un répertoire qui fait que cela se présente.

Vu que le répertoire n'existe pas, Apache va chercher si un fichier portant un basename égal à ce nom existe.

Et manifestement il s'en trouve sur ton site.

Il recherchera dans les extensions qui lui sont connues, et présentera le premier.

Que se passe-t-il lorsque tu appelles themes.xml directement ?

Si tu as possibilité de mettre le debugging à 9, tu pourras voir précisément ce qu'il tente de rechercher.

Lien vers le commentaire
Partager sur d’autres sites

Que se passe-t-il lorsque tu appelles themes.xml directement ?

il affiche le contenu du fichier sans les tags (idem si j'appelle theme). Si j'appelles themes/ j'ai une erreur 404

Si tu as possibilité de mettre le debugging à 9, tu pourras voir précisément ce qu'il tente de rechercher.

Malheureusement non, je suis en mutualisé, impossible de modifier httpd.conf (RewriteLog "logs/rewrite.log" RewriteLogLevel 9, c'est ça ?)

Cependant je crois savoir ce qu'il cherche, je viens de faire un test tout aussi bête, pas besoin de débuggage, j'ai créé le répertoire themes et maintenant la règle 1 fonctionne. Donc si le fichier appelé a le même nom que le répertoire passé dans l'url, le répertoire doit exister. Je trouve cela quand-même très bizarre.

Lien vers le commentaire
Partager sur d’autres sites

Cependant je crois savoir ce qu'il cherche, je viens de faire un test tout aussi bête, pas besoin de débuggage, j'ai créé le répertoire themes et maintenant la règle 1 fonctionne. Donc si le fichier appelé a le même nom que le répertoire passé dans l'url, le répertoire doit exister. Je trouve cela quand-même très bizarre.

Cela confirme tout de même ce que je te disais... non ? ;)

Je sais que c'est un comportement idiot... je vais chercher la raison de celui-ci.

Mais s'il s'agit d'un paramétrage serveur (hors .htaccess) il ne sera pas à ta portée ;)

Lien vers le commentaire
Partager sur d’autres sites

En fait cela vient de l'utilisation de php en module Apache (tu as donc peut-être un fonctionnement en cgi chez toi).

Et c'est lié à la fonction pathinfo() ... qui permet par exemple à dotclear d'avoir des URLs sympathiques sans faire de la réécriture...

Dans le genre: domaine.com/page.php/2004/12/... comme on trouve sur de nombreux sites de presse.

Dans ce cas, on peut laisser tomber l'extension de page.php et écrire l'URL sous la forme domaine.com/page/2004/12/... ce qui "fait plus propre"

Et voilà ;)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Cela confirme tout de même ce que je te disais... non ? ;)

euh oui, le problème vient du répertoire.

Je sais que c'est un comportement idiot... je vais chercher la raison de celui-ci.

Le comportement est plus qu'idiot même. D'ailleurs j'ai pas encore tout compris, mais bon, maintenant ça marche. Je pense qu'on a éclairé quelques lanternes.

Je présenterai mon nouveau site très bientôt.

Merci,

skale

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...