[RESOLU] url rewriting et include capricieux

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

[RESOLU] url rewriting et include capricieux

Message le Lun Mar 17, 2008 12:59

Bonjour,
J'ai un soucis lorsque je veux implémenter de l'url rewriting sur un domaine (chez infomaniak, php5).
Les pages sont gérées en tant que pseudo-frames avec un include, ce qui donne une URL du type www.site.com/?page=toto
L'index va chercher la page toto.php et l'inclue dans le corps de la page.
Au début de mon index, j'utilise la fonction define(...) et j'inclue mes fichiers conf. Je rappelle ensuite if(!defined(...)) {die('accès interdit')} sur toutes les autres pages du site, afin d'en empêcher l'accès direct.

J'aimerais donc obtenir www.site.com/toto/

Le mod_rewrite est bien activé (testé avec RewriteRule ^test.html$ /test.php [L], ça marche nickel)

J'ai saisi ceci dans mon .htaccess:

Code: Tout sélectionner
Options +FollowSymlinks
RewriteEngine on

RewriteRule ^([a-z]+)/$ /index.php?page=$1 [L]

ou
Code: Tout sélectionner
RewriteRule ^([a-z]+)/$ /?page=$1 [L]

(normalement les deux marchent)
et même
Code: Tout sélectionner
RewriteRule ^toto/$ /index.php?page=toto [L]


En utilisant l'url www.site.com/?page=toto, la page s'affiche. Par contre, en utilisant www.site.com/toto/ c'est comme s'il allait chercher www.site.com/toto.php et non www.site.com/?page=toto. Conclusion: j'ai un magnifique 'accès interdit'...
J'ai tenté d'enlever le define() pour voir comment le tout réagi, mais cette fois c'est mes fichiers conf qui ne sont pas inclus. On dirait qu'il 'zappe' la page index.php et l'include et va directement chercher la page inclue...
Par contre ca marche à la perfection en local (Win, easyPHP 2.0b1)

Auriez-vous une idée?

Merci d'avance =)
Dernière édition par astanos le Mar Mai 27, 2008 16:44, édité 1 fois.


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Lun Mar 17, 2008 13:52

Il n'y a pas de problème dans la règle citée mais tu peux ajouter un test devant pour éviter de réécrire pour un répertoire ou un fichier existant :
Code: Tout sélectionner
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/$ /index.php?page=$1 [L]


tu utilises bien la variable $_GET['page'] dans index.php pour récupérer la page?

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

Message le Lun Mar 17, 2008 14:13

Toujours la même chose malgré le test que tu m'as proposé :/

Sinon les pages sont bien récupérées avec un $_GET['page']. Par contre pas directement dans l'index, mais dans un fichier menu.php où je compare le $_GET reçu avec un switch et des noms de pages prédéfinis. (fichier menu.php en require en haut de mon index)

Ce que je ne comprends pas c'est que ça marche en local mais pas en prod sur un serveur.


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Lun Mar 17, 2008 14:31

c'est peut être un problème de chemin d'accès "relatif" car avec ta réécriture, les fichiers sont relatif au répertoire virtuel /toto/ et plus la racine.

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

Message le Lun Mar 17, 2008 15:50

Possible que se soit un problème de chemin relatif, mais alors pourquoi ma redirection pointe vers www.site.com/toto.php?
Cette page n'est jamais accédée directement, elle est inclue dans index.php :/
D'ailleurs si j'insère un echo 'page: '.$_GET['page']; au début de toto.php, que je vais à www.site.com/toto/ il ne me retourne que 'page: ' et rien d'autre. Pas de valeur dans le get, aucune page inclue, rien. Il me fait donc bien pointer www.site.com/toto/ sur www.site.com/toto.php


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Lun Mar 17, 2008 16:08

le problème de lien relatif est uniquement en html (pour les liens et les images de la page) pas au niveau php ou htaccess.

pour voir d'ou vient le problème je remplacerais index.php dans le .htaccess par test.php avec uniquement un echo $_GET['page'] dedans.

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

Message le Lun Mar 17, 2008 18:46

Rien à faire...
Avec une page de test toute simple et un echo $_GET['page'] ça marche. Que se soit le rewriting et l'echo du $_GET

Avec une page de ce style:

Code: Tout sélectionner
echo 'bibi';

include($_GET['page'].'.php');


il m'affiche la page inclue mais pas de 'bibi' sur la page... donc en gros il me retourne la page inclue et c'est tout. Rien de ce qui est sur la page principale comprenant l'include :/


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Lun Mar 17, 2008 18:57

il doit y avoir une redirection avec un header() dans l'include

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

Message le Lun Mar 17, 2008 19:24

Bah voici mes 2 pages de test:

test.php
Code: Tout sélectionner
<?php
echo 'bibi';

include($_GET['page'].'.php');
?>


et phpinfo.php
Code: Tout sélectionner
<?php

phpinfo();

?>


Pas de headers défini. Et malgré ça, www.site.com/phpinfo/ n'affiche pas 'bibi' en début de page, alors qu'il devrait.

astanos
Nouveau WRInaute
 
Messages: 8
Inscription: Lun Mar 17, 2008 12:12

Message le Mar Mai 27, 2008 16:51

Bonjour tout le monde,

Pour info, problème résolu il y a quelques jours grace au staff d'infomaniak.
L'astuce: ajouter ceci dans le .htaccess:

Code: Tout sélectionner
Options -MultiViews


Le MultiViews permet la substitution d'extensions qui sert entre autre à pouvoir appeler la page www.site.com/toto.php par www.site.com/toto ou même www.site.com/toto/ <- le problème était donc là!
Donc si quelqu'un d'autre à ce genre de soucis chez infomaniak... il saura quoi faire :)

ova
Nouveau WRInaute
 
Messages: 40
Inscription: Dim Jan 02, 2005 17:13

Merci !

Message le Dim Oct 05, 2008 20:27

Je viens effectivement d'avoir ce pb sur un serveur infomaniak ! Et grâce à toi, c'est résolu !

Merci d'avoir pour l'info !

:: Ova ::


Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités