IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

URL rewriting qui fonctionne en dev mais pas en prod (même Apache)


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 480
    Par défaut URL rewriting qui fonctionne en dev mais pas en prod (même Apache)
    Bonjour,

    J'ai cherché sur le forum et essayé certaines solutions proposées pour mon problème, mais ça ne fonctionne pas comme je le souhaite.

    Voici donc ce que je souhaiterais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    http://www.monsite.fr ==> http://www.monsite.fr (transformé automatiquement par mon serveur en http://www.monsite.fr/)
    http://www.monsite.fr/ ==> http://www.monsite.fr/
    http://www.monsite.fr/de ==> http://www.monsite.fr/?lang=de
    http://www.monsite.fr/de/ ==> http://www.monsite.fr/?lang=de
    http://www.monsite.fr/de/?param1=ceci&param2=cela ==> http://www.monsite.fr/?param1=ceci&param2=cela&lang=de
    J'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^(de|en|es|fr|it)/([=?0-9a-zA-Z-_]+)$ $2&lang=$1  [QSA,L]
    RewriteRule ^(de|en|es|fr|it)/$ ?lang=$1  [QSA,L]
    RewriteRule ^(de|en|es|fr|it)$ ?lang=$1  [QSA,L]
    Ca fonctionne bien pour le fichier index.php, qui est à la racine de mon site et qui prend bien en compte le paramètre lang=$1.
    La dernière réécriture fonctionne aussi pour tout le site.

    Par contre, les deux premières posent problème.
    Mon fichier index.php contient des include d'autres fichiers, et l'url rewriting conserve "de/" pour les fichiers include. Le lien des fichiers include reste http://www.monsite.fr/de/ au lieu d'être transformé en http://www.monsite.fr/.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Je n'ai pas tout compris. En particulier je n'ai pas compris ce qui n'allait pas avec les 2 premières règles.

    Sur la dernière phrase de ton message : je pense au contraire que les liens qui conservent /de sont bons car si tu supprimes ce /de, le paramètre de la langue va disparaître et ça fera bizarre pour un visiteur de passer d'une première page en /de/xxx à une page en /yyy sans le de devant. Quoi qu'il en soit, si tu veux supprimer le /de dans les liens, il faut simplement écrire dans le code HTML de tes pages des liens en href="/xxx" au lieu de href="xxx" (i.e. ajouter un / devant).

    Quelques corrections toutefois sur tes règles. La première règle que tu donnes n'est pas correcte car on ne peut pas avoir la query string dans le premier argument d'une RewriteRule. Le flag QSA fait en fait ce que tu veux fair. La seconde et la 3ème règle peuvent également être fusionnées en une seule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^(de|en|es|fr|it)/(.+)$ $2?lang=$1  [QSA,L]
    RewriteRule ^(de|en|es|fr|it)/?$ ?lang=$1  [QSA,L]

  3. #3
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 480
    Par défaut
    Bonjour,

    Merci pour la réponse et la simplification des RewriteRule, mais....

    Tout fonctionne comme prévu sur mon site de développement.
    Mais pour le site de production, quand je mets http://www.monsite.fr/de ou http://www.monsite.fr/de/ ou http://www.monsite.fr/de/?param1=ceci&param2=cela, j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The requested URL /chemin/vers/mon/site/ was not found on this server.
    Il y a un "/" ajouté à la fin.

    J'ai vérifié les virtualhost dans apache2/sites-enabled, ils sont similaires en développement et en production. Les sites de dév et de prod sont sur le même serveur.

    développement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <VirtualHost *:80>
    	ServerName 127.0.0.1
    	DocumentRoot /var/www
     
    	Alias /site_dev "/chemin/vers/mon/site_dev"
    	<Directory "/chemin/vers/mon/site_dev">
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride All
    		Order deny,allow
    		Deny from all
    		Allow from 127.0.0.1            # Local
    		Allow from 192.168.0.0/24       # Réseau
    	</Directory>
     
    	ErrorLog /var/log/apache2/error_developpement.log
     
    	# Possible values include: debug, info, notice, warn, error, crit,
    	# alert, emerg.
    	LogLevel warn
     
    	CustomLog /var/log/apache2/access_developpement.log combined
    </VirtualHost>
    production
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <VirtualHost *:80>
    	ServerAdmin blabla.blabla@free.fr
    	ServerName blabla.blabla.hd.free.fr
    	DocumentRoot /var/www
     
    	Alias /site "/chemin/vers/mon/site"
    	<Directory "/chemin/vers/mon/site">
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride All
    		Order allow,deny
    		Allow from all
    	</Directory>
     
    	ErrorLog /var/log/apache2/error_site.log
     
    	# Possible values include: debug, info, notice, warn, error, crit,
    	# alert, emerg.
    	LogLevel warn
     
    	CustomLog /var/log/apache2/access_site.log combined
     
    </VirtualHost>

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Deux questions :
    1. Est-ce que mod_rewrite est activé sur ton serveur de production ?
    2. Est-ce qu'il y a RewriteEngine on dans ton .htaccess ?

  5. #5
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 480
    Par défaut
    Réponse Oui pour les deux questions.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Bon, dommage. Est-ce que tu peux donner tout le contenu du .htaccess ? Peux-tu également regarder dans error_log et nous dire ce qu'Apache raconte lorsque tu demandes l'URL qui ne marche pas ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/07/2013, 14h23
  2. Réponses: 1
    Dernier message: 07/09/2007, 12h15
  3. Eval qui fonctionne sur Firefox mais pas sur IE :D
    Par Comawhite dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/10/2006, 11h31
  4. [2.0] connexion qui fonctionne chez moi mais pas sur un autre pc
    Par Lorenzeb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 13/09/2006, 17h47
  5. Fonction JS qui fonctionne avec Mozilla mais pas avec IE.
    Par etiennegaloup dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo