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 20/01/2012, 15h53   #1
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Par défaut Redirection php et htaccess

Bonjour,

Dans le fichier .htaccess à la racine de mon site j'ai la ligne suivante:

Code :
RewriteRule ^(.*)\.html$ $1.php [QSA,L]
Le problème c'est que dans mon répertoire "galeries" pour la galerie d'images gérée par jAlbum il faut que j'atteigne le fichier index.html et donc il ne faut pas rediriger vers le php qui n'existe pas!

Ma solution c'est de placer un .htaccess dans le répertoire "galeries" qui est identique à celui à la racine du site, mis à part qu'il n'y a plus la redirection ci-dessus.

Malheureusement jAlbum quand il crée l'album statique et qu'il l'envoie sur le serveur, il en profite pour supprimer mon fichier .htaccess dans le dossier "galeries". Donc il fait un grand nettoyage avant de placer ses fichiers.

Le site doit être géré par une personne qui n'y connait rien en informatique. Comment faire en sorte que la redirection html -> php ne se fasse pas? En indiquant une commande spéciale sur le .htaccess à la racine du site et qui s'appliquerait uniquement au dossier "galeries"?

Merci beaucoup
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 23h32   #2
Nouveau Membre du Club
 
Homme Franck Theeten
Inscription : mars 2005
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Theeten
Localisation : Belgique

Informations forums :
Inscription : mars 2005
Messages : 33
Points : 27
Points : 27
Définir au dessus du RewriteRule un RewriteCond avec une condition négative (via le signe '!') sur les chemins qui contiennent "/galeries/" devrait faire l'affaire.

exemple:

Code :
1
2
3
RewriteCond !^(.*)/galeries/(.*)
RewriteRule ^(.*)\.html$ $1.php [QSA,L]
(je n'ai pas vérifié la syntaxe sur un apache qui tourne)

Pour info: plusieurs RewriteCond consécutifs sont liés par un "OR" booléen jusqu'à la prochaine règle (on peut empiler plusieurs exceptions au prochain RewriteRule de cette manière).

Alternativement vous pouvez toujours remplacer la règle Apache par une redirection dans le header et/ou le javascript des fichiers html concernés.
CetTer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 03h38   #3
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Bonjour et merci de votre réponse. Le code que vous me donnez me génère une erreur 500. Pourtant c'est la solution qui m'intéresse car je ne peux pas agir directement sur les pages html ou js du dossier /galeries car ces fichiers sont regénérés automatiquement par un logiciel d'album photo. Mes modifications seraient automatiquement écrasées.

D'autres idées? merci
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 12h05   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 299
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 299
Points : 8 583
Points : 8 583
Qui dit erreur 500 dit "je vais consulter les logs d'erreur d'Apache" (si elles sont accessibles, bien entendu). Dans le cas présent, le problème vient que la RewriteCond n'a qu'un seul paramètre alors qu'il lui en faut deux : le premier paramètre (qui manque) est la chaîne de caractères ou la variable sur laquelle faire le test et le second paramètre est le test. Là, il s'agit donc d'ajouter un premier paramètre. Vu le test, je dirais que c'est %{REQUEST_URI} qu'il faut mettre (c'est l'URL demandée) :
Code :
RewriteCond %{REQUEST_URI} !^(.*)/galeries/(.*)
Au passage, on peut simplifier le test, étant donné que les blocs entre parenthèses ne sont pas exploités.

Donc au final :
Code :
1
2
RewriteCond %{REQUEST_URI} !/galeries/
RewriteRule ^(.*)\.html$ $1.php [QSA,L]
Dernier élément : le code ci-dessus doit être placé dans le .htaccess à la racine du site (sous-entendu : il ne faut pas de .htaccess dans le répertoire galeries).
__________________

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 00
Vieux 21/01/2012, 14h34   #5
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Merci beaucoup Mac, ça fonctionne et j'ai appris quelque chose grâce à tes explications Aussi je n'ai pas le réflexe d'aller dans les logs, je vais m'améliorer sur ce point.
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 16h11   #6
Nouveau Membre du Club
 
Homme Franck Theeten
Inscription : mars 2005
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Theeten
Localisation : Belgique

Informations forums :
Inscription : mars 2005
Messages : 33
Points : 27
Points : 27
Désolé pour l'information incomplète: je n'avais pas d'Apache sous la main, et merci à Max pour la correction.
Je me corrige aussi sur un point: par défaut les RewriteCond d'une même règle sont reliées entre elles par un "AND" et non un "OR" booléen (si toute les conditions sont sur des tests négatifs se souvenir des lois de Morgan ...) .

Le ou existe via:
Code :
1
2
rewritecond param1 test1 [or]
rewritecond param2 test2
CetTer 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 03h00.


 
 
 
 
Partenaires

Hébergement Web