[RESOLU] url rewriting et include capricieux
11 messages • Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
[RESOLU] url rewriting et include capricieux
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:
ou
(normalement les deux marchent)
et même
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 =)
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

- Messages: 1874
- Inscription: Dim Déc 17, 2006 21:08
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 :
tu utilises bien la variable $_GET['page'] dans index.php pour récupérer la page?
- 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?
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.
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

- Messages: 1874
- Inscription: Dim Déc 17, 2006 21:08
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.
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
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

- Messages: 1874
- Inscription: Dim Déc 17, 2006 21: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.
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.
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:
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 :/
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

- Messages: 1874
- Inscription: Dim Déc 17, 2006 21:08
il doit y avoir une redirection avec un header() dans l'include
Bah voici mes 2 pages de test:
test.php
et phpinfo.php
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.
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.
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:
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
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
11 messages • Page 1 sur 1
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 :
- l'URL Rewriting expliqué aux débutants
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Tutoriel URL Rewriting
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- 3ème partie de l'article .htaccess : les réécritures conditionnelles
- Gérer l'entête HTTP en PHP
- Votre site est mal référencé ? Voilà les remèdes !
- L'URL Rewriting expliqué aux débutants
- Début du Full Crawl
- Le référencement de pages PHP
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

le forum