Aller au contenu

URL Rewrting et redirection


nerique

Sujets conseillés

Bonjour,

l'URL rewriting est un sous-domaine qui a été abordé des milliers de fois sur Webmaster-Hub, aussi croyez bien que j'ai recherché avant d'en arriver à poster mon problème, mais je suis à bout...

Merci donc aux personnes qui pourront m'aider.

Dans mon htaccess, je fais deux choses :

Je redirige les gens qui ont tapé http://monsite.net vers http://www.monsite.net

Et je cumule cela avec la redirection d'URL. Et celle-ci du coup ne fonctionne pas.

Voici mon htaccess:

Options +FollowSymlinks 
RewriteEngine on

# URL sans www
RewriteCond %{HTTP_HOST} ^napload\.net$ [NC]
RewriteRule ^(.*) [url="http://www.napload.net/$1"]http://www.napload.net/$1[/url] [QSA,L,R=301]

# PAGE AVEC CHIFFRE AVEC DESCRIPTION :
RewriteRule ^([a-zA-Z0-9]+)-([0-9]+)-([\-a-zA-Z0-9_]+)\.html$ /$1.php?id=$2&fid=$2 [NC,L]

# PAGE AVEC LETTRE AVEC DESCRIPTION :
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z]{1})-([\-a-zA-Z0-9]+)\.html$ /$1.php?l=$2 [NC,L]

# PAGE AVEC LETTRE SANS DESCRIPTION :
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z]{1})\.html$ /$1.php?l=$2 [NC,L]

# PAGE AVEC MODE :
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z]+)\.html$ /$1.php?mode=$2 [NC,L]

# PAGE SANS RIEN :
RewriteRule ^([a-zA-Z0-9]+)-([\-a-zA-Z0-9]*)\.html$ /$1.php [NC,L]

# PAGE :
RewriteRule ^([a-zA-Z0-9]+)\.html$ /$1.php [NC,L]

Merci à ceux qui pourront m'expliquer ou est mon erreur.

Lien vers le commentaire
Partager sur d’autres sites

Je réécrirais la première règle ainsi:

RewriteCond %{HTTP_HOST} ^napload.net$
RewriteRule /?(.*) http://www.napload.net/$1 [R=301,L]

Le flag QSA ne sert à rien dans le cas de réécritures externes.

Et pour les autres, comme je ne sais pas si tes URLs commencent par un / ou non (dépend de la config), j'éviterais le ^ en début du premier argument ou rendrais le / facultatif, comme ceci:

RewriteRule ^/?([a-zA-Z0-9]+)-([0-9]+)-([\-a-zA-Z0-9_]+)\.html$ /$1.php?id=$2&fid=$2 [NC,L]

Ceci est valable chez OVH, mais pour les autres il faut aussi supprimer le / devant le $1 du second argument.

RewriteRule ^/?([a-zA-Z0-9]+)-([0-9]+)-([\-a-zA-Z0-9_]+)\.html$ $1.php?id=$2&fid=$2 [NC,L]

Dan

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Dan, et merci pour ta réponse.

j'ai tenté ce que tu viens de me donner, et, malheureusement, ca ne fonctionne pas mieux.

Je m'explique en terme de pages :

http://www.napload.net fonctionne

http://napload.net fonctionne

http://www.napload.net/news.html fonctionne

http://napload.net/news.html ne fonctionne pas :(

Donc après la modif que tu m'as donné, voici le code :

Options +FollowSymlinks 
RewriteEngine on

# URL sans www
RewriteCond %{HTTP_HOST} ^napload.net$
RewriteRule /?(.*) http://www.napload.net/$1 [R=301,L]

# PAGE AVEC CHIFFRE AVEC DESCRIPTION :
RewriteRule ^/?([a-zA-Z0-9]+)-([0-9]+)-([\-a-zA-Z0-9_]+)\.html$ /$1.php?id=$2&fid=$2 [NC,L]

# PAGE AVEC LETTRE AVEC DESCRIPTION :
RewriteRule ^/?([a-zA-Z0-9]+)-([a-zA-Z]{1})-([\-a-zA-Z0-9]+)\.html$ /$1.php?l=$2 [NC,L]

# PAGE AVEC LETTRE SANS DESCRIPTION :
RewriteRule ^/?([a-zA-Z0-9]+)-([a-zA-Z]{1})\.html$ /$1.php?l=$2 [NC,L]

# PAGE AVEC MODE :
RewriteRule ^/?([a-zA-Z0-9]+)-([a-zA-Z]+)\.html$ /$1.php?mode=$2 [NC,L]

# PAGE SANS RIEN :
RewriteRule ^/?([a-zA-Z0-9]+)-([\-a-zA-Z0-9]*)\.html$ /$1.php [NC,L]

# PAGE :
RewriteRule ^/?([a-zA-Z0-9]+)\.html$ /$1.php [NC,L]

Lien vers le commentaire
Partager sur d’autres sites

J'ai bien étudié mon serveur (serveur dédié) et je ne comprends...

Comment cette première directive peut-elle ne pas fonctionner alors que les suivantes passent ?

j'en perd mon latin pour tout vous dire.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Si j'ai bien compris ton probleme, tu cherches a renvoyer tout ce qui n'est pas http://www.napload.net sur http://www.napload.net.

Pourquoi alors ne pas essayer dans cette optique.

En lieu et place de :

RewriteCond %{HTTP_HOST} ^napload.net$
RewriteRule /?(.*) [url="http://www.napload.net/$1"]http://www.napload.net/$1[/url] [R=301,L]

Essaye plutot :

RewriteCond %{HTTP_HOST} !^www.napload.net$ 
RewriteRule ^/?(.*) [url="http://www.napload.net/$1"]http://www.napload.net/$1[/url] [L,R=301]

Cordialement,

RDD.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour RDD,

effectivement, c'est plus logique, et ca me permettra de gérer également le cas www.napload.com

Malheureusement, je viens de faire la modif, et ca ne fonctionne toujours pas.

C'est quand même fou non ?

Les instructions du dessous fonctionnent et pas celle là. Je deviens chèvre.

Peut-être y a t'il quelquechose de particulier à mettre en place sur un serveur pour gérer les RewriteCond en plus des RewriteRule ?

Quelqu'un saurait ?

Modifié par nerique
Lien vers le commentaire
Partager sur d’autres sites

Re,

Je passerai par une phase de debug pour voir deja d'ou viens le pb.

Essaye de placer ton .htaccess avec uniquement :

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.napload.net$
RewriteRule ^/?(.*) [url="http://www.napload.net/$1"]http://www.napload.net/$1[/url] [L,R=301]

Si cela ne fonctionne pas, donne plus d'info sur ton serveur dedie : apache?, quelle version?, utilisation des vhosts?, ...

Si tu utilises apache, paste uniquement ta conf pour ce domaine (en pv si trop longue).

RDD

Lien vers le commentaire
Partager sur d’autres sites

Alors cette phase de debug n'a déjà, elle pas fonctionné....

j'utilise Apache 2

Server version: Apache/2.0.54

Server built: Jul 28 2006 09:04:55

et la conf apache du vhost :

<VirtualHost *>

ServerName www.napload.net

ServerAlias *.napload.net

DocumentRoot /data0/web/napload

php_value include_path ".:/data0/includes/includes-php2:/data0/includes/includes-xsl:/data0/web/napload/includes"

ScriptAlias /cgi-bin/ /data0/web/napload/cgi-bin/

</VirtualHost>

Ca te parle ?

Modifié par nerique
Lien vers le commentaire
Partager sur d’autres sites

OK,

En effet il manque quelques lignes essentielles.

Je reprend donc ta conf en apportant les modifs :

<VirtualHost *>
ServerName www.napload.net
ServerAlias *.napload.net
[b]RewriteEngine On[/b]
DocumentRoot /data0/web/napload
[b]AllowOverride All[/b]
php_value include_path ".:/data0/includes/includes-php2:/data0/includes/includes-xsl:/data0/web/napload/includes"
ScriptAlias /cgi-bin/ /data0/web/napload/cgi-bin/
</VirtualHost>

Le RewriteEngineOn que je met la n'est je pense pas indispensable mais je n'ai personnellement jamais essaye sans. Par contre la regle primordiale, c'est bel et bien le AllowOverride All qui lui permet la reecriture d'url. Essaye de rajouter ces 2 lignes et tiens nous au courant.

Lien vers le commentaire
Partager sur d’autres sites

Hello !

Quand je met le AllowOverride dans le vhost, ca me met une erreur me disant qu'il n'a rien à faire ici.

Là je parle d'un vhost dans un .conf inclus lors du chargement de apache

Lien vers le commentaire
Partager sur d’autres sites

Salut,

OK, je comprend mieux alors (je n'utilisais pas ta methode de conf pour les vhosts).

Voici comment j'aurais creer mon .conf pour ton site.


<VirtualHost *>
ServerName napload.net
ServerAlias *.napload.net

ServerAdmin webmaster_AT_napload.net

RewriteEngine On

DocumentRoot /data0/web/napload
<Directory /data0/web/napload>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

#Utile si tu as plusieurs vhosts, ca creer un fichier log par vhost
# Dans ce fichier on log les erreurs
ErrorLog /var/log/apache2/error-napload.log

# Le niveau de log
LogLevel warn

# Ici on log les acces
CustomLog /var/log/apache2/access-napload.log combined
# Ce n'est pas obligatoire, ca permet juste de ne pas afficher les infos sur ton serv
# si tu n'as pas personnaliser tes erreurs (404, 500...)
ServerSignature Off
</VirtualHost>

En esperant repondre a ta question.

RDD

Lien vers le commentaire
Partager sur d’autres sites

Hello à tous !

Bon alors j'ai enfin trouvé le problème.

En fait, dans le doute, j'ai fait un a2enmod rewrite pour installer le mod_rewrite proprement.

Ensuite, il faut éditer le fichier /etc/apache2/sites-enabled/LE_FICHIEr_DE_VOTRE_SITE

Et changer les directoves AllowOverride à All.

Celles-des .conf ne suffisait pas....

Voilà, merci encore pour votre aide.

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