UR me rajoute étrangement 2 fois mes sous-répertoire ?!

Nouveau WRInaute
Bonjour,

Après quelques essais laborieux avec l'UR ( pourtant j'utilise des regex fréquemment au travail ! ) j'aimerais tout rediriger vers un fichier php afin dans un premier temps de mieux débugguer mes rédirections.

Voila le principe :

Cas n°1 :
http://annonces.site.com
=> http://site.com/annonces/

Cas n°2 :
http://annonces.site.com/moto/
=> http://site.com/annonces/moto/

Cas n°3
http://annonces.site.com/moto/neuf/
=> http://site.com/annonces/moto/neuf/

J'ai fait donc une expression vraiment simpliste qui catche le sous-domaine ($1) et la ressource demandé ( ce qui suit le ".com" dans $2 ) :

Code:
RewriteCond     %{HTTP_HOST}        !^site\.                         
RewriteCond     %{HTTP_HOST}        !^www\.site\.
RewriteCond     %{HTTP_HOST}        ^[^.]+\.site\.
RewriteRule     ^(.+)$              %{HTTP_HOST}/$1
RewriteRule     ^([^.]+)\.site\.com(.*)$  http://site.com/go.php?s=$1&rs=$2 [L]

Ca marche pour les 2 premiers cas mais pas le 3eme.
Voici les résultats ( ce qui apparait dans l'url ) :

Cas n°1 :
http://annonces.site.com
=> http://site.com/go.php?s=annonces&rs=/index.php
donc ici c'est bon ( quoi je comprend pas pourquoi il ajoute index.php alors que je ne l'ai pas saisie explicitement et qu'il ne le fait pas pour les 2 cas suivant .. )

Cas n°2 :
http://annonces.site.com/moto/
=> http://site.com/go.php?s=annonces&rs=/moto//
la c'est presque bon, je vois pas pourquoi il ajoute un / supplémentaire ?!

Cas n°3
http://annonces.site.com/moto/neuf/
=> http://site.com/go.php?s=annonces&rs=/moto/neuf/neuf/
alors la j'comprend plus rien !

Qu'est-ce que j'ai fait qui pourrait faire ces doublons ( '/' dans le cas n°2 et le 'neuf/' dans le cas n°3 ) ?

Je me suis dis qu'il devait peut-être repasser une seconde fois dans le .htaccess mais pourtant j'ai mis 2/3 régles pour pas qu'il y passe s'il n'a pas de nom de sous-domaine ( ou qu'il s'agit de 'www' ).

Merci de votre aide ..
 
WRInaute occasionnel
Apparemment, le problème viendrait d'un bug d'Apache : http://archive.apache.org/gnats/7879 où, dans certains conditions et à partir d'une réécriture dans un .htaccess, une partie du chemin est ajoutée.

Voilà ce que me racontent mes logs
Code:
RewriteCond: input='h1.site.com' pattern='!^site\.' => matched
RewriteCond: input='h1.site.com' pattern='!^h2\.site\.' => matched
RewriteCond: input='h1.site.com' pattern='^[^.]+\.site\.' => matched
[per-dir ~/h1/] rewrite moto/neuf -> h1.site.com/moto/neuf
[per-dir ~/h1/] add per-dir prefix: h1.site.com/moto/neuf -> ~/h1/h1.site.com/moto/neuf

[per-dir ~/h1/] add path info postfix: ~/h1/h1.site.com/moto/neuf -> ~/h1/h1.site.com/moto/neuf/neuf

[per-dir ~/h1/] strip per-dir prefix: ~/h1/h1.site.com/moto/neuf/neuf -> h1.site.com/moto/neuf/neuf
[per-dir ~/h1/] applying pattern '^([^.]+)\.arrakeen\.net(.*)$' to uri 'h1.site.com/moto/neuf/neuf'
[per-dir ~/h1/] rewrite h1.site.com/moto/neuf/neuf -> http://h2.site.com/dyn/ok.php?s=h1&rs=/moto/neuf/neuf

La ligne importante là-dedans étant add path info postfix qui ne devrait pas être là. J'ai bien peur que la solution soit de passer tout ca dans un httpd.conf, si c'est possible, soit de bricoler les règles de réécriture pour virer le chemin dupliqué.
 
Nouveau WRInaute
Hummm.. je veux bien penser qu'il s'agisse d'un bug dans RewriteURL mais le l'annonce de la correction du bug date de 2001 ( State: closed ).
Et puis je tourne sur la derniere version de la branche 1.3 d'Apache (packet debian officiel).

Le mieux serait donc de faire un une ristourne pour virer ça directement dans le .htaccess puisque je n'aurais pas accès au httpd.conf

Si quelqu'un a une idée pour virer ces doublons ? sinon j'vais le faire directement en php ça sera peut-être plus simple.

En tout cas je te remercie beaucoup de t'être penché sur mon problème.
 
Nouveau WRInaute
A non c'est fixé dans la branche 2.0 :)
This may not be fixed in 1.3.x, but it is fixed in 2.0.30

Donc c'est un vieux bug mais il pouvait apparement pas patché la branche 1.3 :'(
 
WRInaute occasionnel
Dans le cas que tu proposes, il y a une solution simple

Code:
RewriteCond     %{HTTP_HOST}        !^site\.                          
RewriteCond     %{HTTP_HOST}        !^www\.site\. 
RewriteCond     %{HTTP_HOST}        ^[^.]+\.site\. 
RewriteRule     ^(.+)$              %{HTTP_HOST}/$1 
RewriteRule     ^([^.]+)\.site\.com.*$  http://site.com/go.php?s=$1&rs=%{REQUEST_URI} [R]

Mais ca ne va pas t'aider si tu veux faire autre chose avec l'URL.

Ou alors

Code:
RewriteCond     %{HTTP_HOST}        !^site\.                          
RewriteCond     %{HTTP_HOST}        !^www\.site\. 
RewriteCond     %{HTTP_HOST}        ^[^.]+\.site\. 
RewriteRule     ^(.+)$              %{HTTP_HOST}/$1 
RewriteRule     ^([^.]+)\.site\.com(\/.*)\/[^\/]*$  http://site.com/go.php?s=$1&rs=$2 [R]

en espérant que ca ne laisse pas passer un cas particulier
 
WRInaute discret
Désolé de faire remonter ce vieux topic, mais j'ai tenté d'appliquer le même systeme pour avoir une redirection du genre

nimportequoi.monsite.com
devienne
www.monsite.com/?$1

Ca donne ca

RewriteCond %{HTTP_HOST} !^site\.
RewriteCond %{HTTP_HOST} !^www\.site\.
RewriteCond %{HTTP_HOST} ^[^.]+\.site\.
RewriteRule ^([^.]+)\.site\.com$ http://www.site.com/?$1 [QSA,L,R=301]

Mais mon problème concerne les DNS. Le sous domaine n'étant pas forcément déclaré dans Bind, il me renvoie une erreur 500.
Y'a t-il un moyen de déclarer tous les sous domaines du sites dans le fichier bind?

En bref, comment avez vous fait?

Merci d'avance

A+
Sepang
 
Discussions similaires
Haut