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 :

Mod_rewrite fonctionne en local, pas en ligne


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 37
    Points : 41
    Points
    41
    Par défaut Mod_rewrite fonctionne en local, pas en ligne
    Hello,

    Je viens de préparer la config d'un serveur dédié afin de logiquement y mettre en ligne un site. Mon problème est qu'en local, le fichier .htaccess qui réécrit mes urls fonctionne mais dès que je mets le site en ligne, on dirait que apache bypass complètement le fichier car les urls réécrites ne fonctionne plus et dans le log apache, j'ai une erreur (no such file or directory - pas de fichier ou de répertoire).

    mod_rewrite et mod_proxy sont pourtant chargés et AccessFileName .htaccess est activé.

    Vous n'auriez pas une petite idée?

    Voici le htaccess:

    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
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
    ## Http referers ##
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://ip_du_site/.*$ 
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?le_site.com/.*$
    ## Deny hotlinking ##
    RewriteRule .*\.(png|swf|flv|mp3|mp4|jpe?g|js)$ -			[N,F,L]
    ## Error documents ##
    ErrorDocument  400				/index.php?id=404
    ErrorDocument  401				/index.php?id=404
    ErrorDocument  402				/index.php?id=404
    ErrorDocument  403				/index.php?id=404
    ErrorDocument  404				/index.php?id=404
    ErrorDocument  500				/index.php?id=404
    ## Deny access to dirs ##
    RewriteCond %{REQUEST_URI} !^/dir/
    ## Rewrite urls ##
    RewriteRule ^([a-z]+)/([0-9a-zA-Z-_.*]+)$		/index.php?id=$1&fx=$2    [L,NC]
    RewriteRule ^([0-9a-zA-Z-]+)$				/index.php?id=$1		      [L,NC]
    Voici ce que j'ai dans mon log rewrite pour une requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ -> 
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] applying pattern '.*\.(png|swf|flv|mp3|mp4|jpe?g|js)$' to uri ''
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ -> 
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] applying pattern '^([a-z]+)/([0-9a-zA-Z-_.*]+)$' to uri ''
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ -> 
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (3) [perdir /var/www/html/] applying pattern '^([0-9a-zA-Z-]+)$' to uri ''
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f21ba0/initial] (1) [perdir /var/www/html/] pass through /var/www/html/
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/index.php -> index.php
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] applying pattern '.*\.(png|swf|flv|mp3|mp4|jpe?g|js)$' to uri 'index.php'
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/index.php -> index.php
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] applying pattern '^([a-z]+)/([0-9a-zA-Z-_.*]+)$' to uri 'index.php'
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/index.php -> index.php
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (3) [perdir /var/www/html/] applying pattern '^([0-9a-zA-Z-]+)$' to uri 'index.php'
    xx.x.xxx.155 - - [02/Jun/2011:12:20:36 +0200] [www.xxx.com/sid#9d154a8][rid#9f2cf10/subreq] (1) [perdir /var/www/html/] pass through /var/www/html/index.php
    J'ai aussi essayé le Options -MultiViews, les AllowOverride du dossier sont All... En gros, je désespère...

    Merci d'avance!

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    L'extrait de log mod_rewrite que tu donnes montre que :
    1. mod_rewrite fonctionne (donc non, le .htaccess il n'est pas bypassé)
    2. mod_rewrite traite l'URL comme attendu : tu demandes http://tonsite.com/ donc dans un .htaccess mod_rewrite commence par analyser la chaîne de caractères '' (le premier / est toujours enlevé dans un .htaccess) ce qui aboutit à /index.php, donc 'index.php', qui ne matche aucune règle.

    Donc pour moi, tout va bien D'où la question : qu'est-ce qui ne va pas ? Quel est le problème ? "ne fonctionne plus" n'est pas des plus descriptif

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Merci pour ta réponse ^^

    C'est vrai, j'aurai pu être plus clair sur ce qui ne va pas En fait, le .htaccess est lu, le mod_rewrite fonctionne mais la page est toute blanche et dans le log d'Apache, j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PHP Warning:  require_once(/inc/cfg.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory in /var/www/html/index.php on line 3
    PHP Fatal error:  require_once() [<a href='function.require'>function.require</a>]: Failed opening required '/inc/cfg.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/index.php on line 3
    Au tout début du fichier index.php, j'effectivement un require_once:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    require_once('/inc/cfg.php')
     
    ?>
    Si j'enlève le "/" avant inc, ça fonctionne mais ce n'est pas le but rechercher (puisque j'ai besoin de chemins absolus xD), je suis vraiment perdu pour le coup, j'ai encore essayé de différents trucs et rien ne fonctionne :/

    (ps: comment ça peut fonctionner parfaitement en local et pas en-ligne? La config du serveur est quasi la même...)

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    La réponse est dans le message d'erreur :
    Citation Envoyé par Log
    Failed opening required '/inc/cfg.php' (include_path='.:/usr/share/pear:/usr/share/php')
    Modifie l'include_path dans ton fichier php.ini pour y indiquer le document root /var/www/html.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    J'ai essayé tout à l'heure mais ça n'avait rien donné, je vais refaire le test quand même... Mais est-ce que c'est normal qu'il faut que j'ajoute la ligne "include_path" et donc qu'elle n'existe pas préalablement?

    Merci pour les indices en tout cas!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 37
    Points : 41
    Points
    41
    Par défaut
    (mwarf j'étais connecté sur le compte de frère lol bref)

    Merci, j'ai essayé en modifiant l'include_path et rien n'y fait, j'ai testé avec:

    include_path = ".:/var/www/html"
    include_path = ".:/var/www/html/"
    include_path = "/var/www/html"
    include_path = "/var/www/html/"

    Et je reçois le même type d'erreur que dans mon autre post sauf que l'include_path change (lol bah oui!)...

    J'ai bien relancé le serveur entre chaque changement...


  7. #7
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu développes sous Windows, j'imagine ? Parce que la doc PHP dit aussi ceci :
    Citation Envoyé par Doc PHP include()
    Si un chemin est défini, absolu ou relatif (commençant par une lettre de lecteur suivie de \ pour Windows, ou / pour Unix/Linux), l'include_path sera ignoré.
    Donc sous Windows, faire un include("/...") activera l'include_path et s'il est paramétré pour contenir le document root (et j'imagine que tu as vérifié, n'est-ce pas ?) ton fichier sera trouvé. En revanche, sous Unix, faire un include("/...") bypasse l'include_path et comme il n'existe pas de répertoire /inc sur ton système, ça ne marche pas.

    Je ne suis pas une brute en PHP alors je te conseille vivement de demander sur le forum PHP comment gérer au mieux les include. Tu as toujours la possibilité de modifier ton include pour travailler avec $_SERVER["DOCUMENT_ROOT"], mais je ne sais pas s'il y a une autre possibilité.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 37
    Points : 41
    Points
    41
    Par défaut
    Ouah... Je suis bluffé, ça fait 2 jours que je google à fond sur la config apache et php mais je n'ai pas du tout pensé aux différences windows / unix... Je ne m'en serais absolument pas douté en fait

    Donc je dois reprendre tous mes includes quel *!+*¬#°@ !! lol

    Enfin, faut voir le côté positif du truc: je me coucherais moins bête ce soir

    Merci infiniment pour ton aide Mac, je vais aller reprendre mes require/include et Dieu sait qu'il y en a xD!



    Chalut!

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

Discussions similaires

  1. [MySQL] Google Analytics fonctionne en local pas en ligne
    Par nolookpass8 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/03/2013, 10h19
  2. Réponses: 1
    Dernier message: 19/01/2008, 14h15
  3. [FPDI] Fonctionne en local/pas en ligne: "FPDF error: Unexpected data in xref table"
    Par gobi13 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/10/2007, 12h27
  4. filezilla server, fonctionne en local pas à distance
    Par debdev dans le forum Administration
    Réponses: 18
    Dernier message: 25/04/2007, 23h58
  5. Réponses: 4
    Dernier message: 15/02/2006, 11h24

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