Rediriger tout sauf un type d'adresse

Nouveau WRInaute
Bonjour,

Je cherche à rediriger toute adresse de subdomain.domain.com vers www.domaine.com, sauf si l'url est du type : subdomain.domain.com/any-page.htm

J'ai pensé à utiliser en tête de liste un RewriteRule matchant les urls se terminant par .htm , en utilisant le flag L pour stopper le matching.

Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
RewriteRule ^([^.]*).htm$ $1.htm [L]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
# rediriger domain.com vers www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [QSA,R=301,L]
# règles du Zend Framework
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Mais ça ne fonctionne pas, FF me donne le message :
"Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas."
Merci pour votre aide
 
WRInaute discret
Bonjour
et bienvenue dans wri :wink:

tester ce code ,

Code:
RewriteCond %{REQUEST_URI} !(.*).htm$
RewriteRule (.*) http://www.domaine.com/$1 [QSA,R=301,L]

j'ai pas tester mais je pense que ça marche :wink:

bonne journée
 
Nouveau WRInaute
mahdivitchee a dit:
Bonjour
et bienvenue dans wri :wink:

tester ce code ,

Code:
RewriteCond %{REQUEST_URI} !(.*).htm$
RewriteRule (.*) http://www.domaine.com/$1 [QSA,R=301,L]

j'ai pas tester mais je pense que ça marche :wink:

bonne journée

Hello,
merci pour l'accueil et ton aide :)
Malheureusement, ça ne prends pas. Toujours le même message sous FF.
J'ai l'impression qu'il y a un conflit avec une ligne en dessous qui cause une redirection infinie.

ps : au passage, je ne comprends pas à quoi sert le "!" devant l'uri ? Je connais le "^" qui indique un début de chaine, mais le "!" je vois pas

Merci
 
Nouveau WRInaute
Bon apparemment, il faut répéter les RewriteCond à chaque instruction.

Code:
RewriteEngine On
# garder les adresses se terminant par .htm
RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
RewriteRule \.htm$ - [L]
# rediriger tout le reste vers www
RewriteCond %{HTTP_HOST} ^subdomain.domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
# rediriger domain.com vers www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [QSA,R=301,L]
# règles pour le Zend Framework
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Les liens quelconques sont bien redirigés vers www.domain.com/etc...

Mais les adresses en .htm me donnent cette fois un 404 not found.

Je pense que c'est la règle
Code:
RewriteRule ^.*$ index.php [NC,L]
qui ne s'applique pas sur le sousdomaine
 
WRInaute discret
Bonjour

le ! ( interdit )
le ^ qui commence

un article : http://httpd.apache.org/docs/2.0/misc/rewriteguide.html


j'ai remarque qui tu es compliquez bq les chose

normalement avec 2 ligne, il faut ça marche

Code:
RewriteCond %{HTTP_HOST}   !^/(.*)\.htm$
RewriteRule ^/(.*)     http://www.domaine.com/$1 [L,R]

Nb: j'ai ajouter ^ dans le 1er ligne et aussi \

1er ligne : interdit redirection de toutes les fichier qui termine par .html
2éme ligne : redirection toutes le contenu de ancien site vers nouveau site


( tester seulement la 2éme ligne est ce que ça marche ou non )

*** un exemple détaillé dans ce site : ***http://yansanmo.progysm.com/doc/modrewrite

RewriteRule ^([a-z]+)/(([a-z]+)/([a-z0-9=&]*))?$ /home/test/public_html/index.php?cat=$1&id=$3&$4

Cette chaîne permet de retranscrire: /rep/5/var3&test=4 en /index.php?cat=rep&id=5&var3&test=4. Cependant, comment exclure un seul répertoire, /prive/ par exemple, d'utiliser cette redirection? Nous sommes arrivés à trouver cette solution:

RewriteCond %{REQUEST_URI} !prive/.*

On écrit la commande RewriteCond juste avant la commande RewriteRule. Elle indique qu'il ne faut pas que notre URI débute par prive/. Le fichier .htaccess ressemble donc à:

RewriteEngine On
RewriteCond %{REQUEST_URI} !prive/.*
RewriteRule ^([a-z]+)/(([a-z]+)/([a-z0-9=&]*))?$ /home/test/public_html/index.php?cat=$1&id=$3&$4
 
Nouveau WRInaute
Code:
RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC] #concerne le sous-domaine 
RewriteCond %{REQUEST_URI} !^/(.*)\.htm$ #tout ce qui ne se termine pas par .htm
RewriteRule ^/(.*) http://www.domaine.com/$1 [L,R] # on dirige le tout vers www.domaine.com/etc...

# rediriger domaine.com vers www.domaine.com
RewriteCond %{HTTP_HOST} ^domaine\.com$ [NC]
RewriteRule ^(.*) http://www.domaine.com/$1 [QSA,R=301,L]

# Redirection vers index.php sauf fichiers
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Pour moi ça a l'air bon, mais la redirection ne s'effectue pas.

http://sousdomaine.domaine.com/une-requete.htm => ne redirige pas, parfait ça fonctionne.
http://sousdomaine.domaine.com/foo/bar => ne redirige pas vers http://www.domaine.com/foo/bar :(
 
Nouveau WRInaute
Bon en fait, il semble que les conditions et la règle ne soient même pas matchées.
J'ai essayé ça :
Code:
RewriteCond %{HTTP_HOST} ^sousdomaine\.domaine\.com [NC]
RewriteRule ^/(.*) https://www.google.com/?q=$1 [L,R]

pour le fun. Et aucune adresse n'est redirigée vers google. On dirait que la condition HTTP_HOST ne passe vraiment pas
 
Discussions similaires
Haut