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 02/06/2011, 12h11   #1
Futur Membre du Club
 
83pulse@gmail.com 83pulse@gmail.com
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : 83pulse@gmail.com 83pulse@gmail.com

Informations forums :
Inscription : février 2011
Messages : 33
Points : 17
Points : 17
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 :
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 :
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!
kfa1983 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 15h04   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 283
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 283
Points : 8 569
Points : 8 569
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
__________________

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 déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/06/2011, 15h16   #3
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2007
Messages : 77
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2007
Messages : 77
Points : 78
Points : 78
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 :
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 :
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...)
wenijah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 15h28   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 283
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 283
Points : 8 569
Points : 8 569
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.
__________________

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 déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/06/2011, 15h31   #5
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2007
Messages : 77
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2007
Messages : 77
Points : 78
Points : 78
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!
wenijah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 15h52   #6
Futur Membre du Club
 
83pulse@gmail.com 83pulse@gmail.com
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : 83pulse@gmail.com 83pulse@gmail.com

Informations forums :
Inscription : février 2011
Messages : 33
Points : 17
Points : 17
(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...

kfa1983 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 22h00   #7
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 283
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 283
Points : 8 569
Points : 8 569
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é.
__________________

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 déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/06/2011, 22h17   #8
Futur Membre du Club
 
83pulse@gmail.com 83pulse@gmail.com
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : 83pulse@gmail.com 83pulse@gmail.com

Informations forums :
Inscription : février 2011
Messages : 33
Points : 17
Points : 17
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!
kfa1983 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h16.


 
 
 
 
Partenaires

Hébergement Web