Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 12h48   #1
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Par défaut Redirection HTACCESS pour site bilingue

Bonjour tout le monde,

Je dois faire un site bilingue et je bloque sur un petit problème de redirection.

Pour le visiteur, les deux versions se trouvent respectivement dans deux répertoires différents :
http://www.monsite.com/fr
http://www.monsite.com/en

Comme le code source est unique, tous les fichiers sont en fait directement à la racine du site.

J'ai réussi facilement à simuler la redirection pour tous les scripts php.
Code :
1
2
3
4
RewriteRule ^([0-9a-zA-Z]+)/([0-9a-zA-Z-_/]+)/$ index.php?lan=$1&p=$2  [QSA,L]
RewriteRule ^([0-9a-zA-Z]+)/([0-9a-zA-Z-_/]+)$ index.php?lan=$1&p=$2  [QSA,L]
RewriteRule ^([0-9a-zA-Z]+)/$ index.php?lan=$1  [QSA,L]
RewriteRule ^([0-9a-zA-Z]+)$ index.php?lan=$1  [QSA,L]
Ainsi :
http://www.monsite.com/fr/contact/
est redirigé vers :
http://www.monsite.com/index.php?lan=fr&p=contact

Et tout fonctionne à priori correctement. Sauf que le basepath html étant http://www.monsite.com/fr/ ou http://www.monsite.com/en/, tous les fichiers css, images, js sont cherché dans les faux répertoire de langue et non à la racine et ne sont alors plus trouvés.

Comme ce serait trop long de définir des chemins absolus pour tous les fichiers, j'envisage deux solutions :
  • supprimer "en/" ou le "fr/" pour tous les fichiers avec extension
  • mettre tout dans le répertoire "fr" et redirigé le répertoire "en" vers "fr", en ajoutant un paramètre pour indiquer que c'est de l'anglais.

Mais voilà, je patauge depuis des heures, et je n'arrive pas du tout à le faire. Est-ce que quelqu'un a une idée ?

Merci en tout cas d'avoir pris le temps de lire ce message et peut-être d'y répondre.

Bonne journée,

Korbn
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 22h08   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 578
Points : 8 578
Citation:
Envoyé par korbn Voir le message
  • supprimer "en/" ou le "fr/" pour tous les fichiers avec extension
Tu veux faire ça comment ? Je n'ai pas bien compris, en fait.

Ce que je ferais c'est ajouter une règle de réécriture pour les fichiers avec une extension donnée pour les "ramener" dans le répertoire parent :
Code :
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(js|css|jpg)$ ../$0 [L]
Je n'ai pas testé, je ne sais pas du tout si ça marche.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 14h13   #3
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Merci beaucoup pour ta réponse.

Je voudrais faire l'équivalent d'un str_replace mais en htaccess et seulement pour les fichiers avec une extension autre que "php". Autrement dit, l'équivalent htaccess du code suivant ($extension étant l'extension et $url l'adresse url demandée)
Code :
if($extension!=".php") $url = str_replace("en/","",$url);
Ainsi,
Code :
http://localhost/website/monsite/fr/site/public/themes/style.css
devrait être transformé en
Code :
http://localhost/website/monsite/site/public/themes/style.css
sauf qu'avec ton code, cela devient
Code :
http://localhost/website/.css
Est-ce que quelqu'un sait où cela cloche ?

Merci d'avance
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 19h50   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 578
Points : 8 578
Ca cloche dans ma règle, visiblement ! En même temps, j'avais prévenu que je n'avais pas testé On va essayer autre chose :
Code :
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule (.*) ../$1 [L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 01h23   #5
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Merci beaucoup, cela marche nickel.

Ce module est vraiment très utile quand tu sais t'en servir.
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 00h25   #6
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Zut, cela ne marche en fait pas du tout une fois que je mets cela sur le serveur.

Cela affiche l'erreur suivante "Bad Request Your browser sent a request that this server could not understand."

Si je rajoute une redirection [L,R] et que je charge le fichier
Code :
http://www.monsite.com/en/style.css
voilà l'url affichée :
Code :
http://www.monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/en/style.csshttp://www.monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/var/www/virtual/monsite.com/en/style.css
C'est grave docteur ?
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 00h47   #7
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Si j'ai bien compris, la redirection se faisait à l'infini. Afin de ne rediriger qu'une seule fois, j'ai donc remplacé la redirection par :
Code :
RewriteRule ^en/(.*) ../$1 [L,R]
Et voici ce que cela donne :
Code :
http://www.monsite.com/var/www/virtual/monsite.com/style.css
J'ai donc remplacé cela par :
Code :
RewriteRule ^en/(.*) /../$1 [L,R]
Et miracle cela fonctionne ! Enfin, pour les fichiers seuls. Le reste semble avoir encore des problèmes, mais bon, c'est déjà cela. Je reviens vers vous une fois que j'ai fais plus de recherches...
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 01h11   #8
Membre à l'essai
 
Inscription : novembre 2008
Messages : 39
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 39
Points : 22
Points : 22
Aaaaaaaaaaaaaaaargh (comme le château).

Si je mets [L,R], cela fonctionne correctement pour les fichiers avec extensions.
Par contre, si je ne mets que [L], cela me renvoie un "Bad request".

A la limite, ça ne me dérange pas. Ce qui est plus gênant, c'est que désormais, tout le répertoire en/ est redirigé à la racine.

http://www.monsite.com/en/ http://www.monsite.com/
http://www.monsite.com/en/index.php http://www.monsite.com/index.php

Pourtant le code est bien
Code :
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^en/(.*) /../$1 [L,R]
Et ne devrait donc concerner que les fichiers avec extensions (.*) sauf les php (!\.php$)

Pourquoi n'est-ce pas le cas, ô monde cruel ? (à prononcer à haute voix avec un léger trémolo, cela fait plus dramatique)
korbn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 22h09   #9
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 578
Points : 8 578
Est-ce que tu as mis la configuration sur ton serveur dans un fichier .htaccess comme sur ton PC ? Le /var/... vient a priori du fait que tu as mis tes règles dans le fichier httpd.conf ou équivalent et pas dans un .htaccess. Me trompe-je ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h39.


 
 
 
 
Partenaires

Hébergement Web