Quelle est la bonne RewriteRule ?

  • Auteur de la discussion Auteur de la discussion Stipe
  • Date de début Date de début
WRInaute passionné
ce n'est pas possible avec ces deux url!

ou alors il faut que tu nous donne la règle qui permet de transformer -http://www.monsite.be/rep1/rep2/rep3/rep4/rep5/index.php en -/monsite/index.php?page=23.1.1.1.1

avec ce genre d'url, le mieux est de passer par une table de transco et une règle comme celle-ci :
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([-/A-Za-z0-9\.]+)/index\.php$	/index.php?repertoire=$1 [L]
il faut donc ajouter un select au début de index.php pour récupérer la page correspondant au répertoire
 
Nouveau WRInaute
Merci beaucoup pour ta prompte réponse.

A la racine du site, j'ai un fichier index.php dans lequel j'ai fait un switch case :

<?php
$numlien= @$_REQUEST["page"];

switch ($numlien)
{
case '1' :
$page = "welcome/";
break;
case '2' :
$page = "rep/1";
break;
... ... ...
case '23.1.1.1.1' :
$page = "rep1/rep2/rep3/rep4/rep5/";
break;
... ... ...
default :
$page = "welcome/";
break;
}
?>

Dois-je bien continuer comme tu l'indiques ? Il me semble que c'est plus compliqué que prévu.

J'ai aussi placé le fichier .htaccess dans le dernier répertoire (rep5) où j'ai un fichier index.php qui inclut un contenu suivant la langue récupérée dans une session.

Code de ce fichier index.php :
<?php include($langue.'/rep1/rep2/rep3/rep4/rep5/index.contenu.php'); ?>

Merci.
 
WRInaute passionné
si tu n'as qu'une url a rewriter, tu peux simplement mettre :
Code:
RewriteRule ^rep1/rep2/rep3/rep4/rep5/index\.php$ /monsite/index.php?page=23.1.1.1.1 [L]
 
Nouveau WRInaute
Désolé, mais aucun changement.

Comme c'est un peu confus, pourrait-on faire un petit récapitulatif :

Je crée donc le fichier .htaccess à la racine du site avec :

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^rep1/rep2/rep3/rep4/rep5/index\.php$ /monsite/index.php?page=23.1.1.1.1 [L]


Comme j'ai beaucoup d'url, dois-je toutes les placer ici ?
Doit-il vraiment y avoir un .htaccess dans chaque répertoire ?

Message d'erreur actuel :
Warning: include(global.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\monsite\rep1\rep2\rep3\rep4\rep5\index.php on line 2
Warning: include() [function.include]: Failed opening 'global.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\monsite\rep1\rep2\rep3\rep4\rep5\index.php on line 2
Warning: include(/rep1/rep2/rep3/rep4/rep5/index.contenu.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\monsite\rep1\rep2\rep3\rep4\rep5\index.php on line 7
Warning: include() [function.include]: Failed opening '/rep1/rep2/rep3/rep4/rep5/index.contenu.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\monsite\rep1\rep2\rep3\rep4\rep5\index.php on line 7

Entretemps, je continue à tester ...

Merci !
 
WRInaute passionné
le mieux est d'avoir un .htaccess a la racine.
Si il y a besoin, tu peux en mettre un autre dans un autre répertoire (par exemple pour ajouter une protection par mot de passe)

sinon, pour les include l'idéal est de mettre le chemin complet. j'utilise cette écriture pour éviter les problèmes avec des include dans des include (dirname(__FILE__) correspond au répertoire du fichier contenant l'instruction include) :
Code:
include(dirname(__FILE__) . '/uninclude.php');
 
Nouveau WRInaute
J'ai un fichier global.php contenant des variables pour faciliter le chemin :

<?php
include($langue.'/traduction.php'); // contenant les variables des intitulés traduits
?>

<?php
$lib_path ='localhost/monsite/';
?>

<?php
$lib_internepath ='C://wamp/www/monsite/';
?>


Et dans chaque répertoire de l'architecture du site, un fichier index.php contenant :

<?php
include('global.php');
?>

<?php include($langue.'/rep1/index.contenu.php'); ?>

Et j'ai la même architecture pour chaque langue : fr, en, ..., les fichiers s'appelent
index.contenu.php et comme le nom l'indique ils contiennent le contenu des pages.


Ok pour le fichier .htaccess à la racine du site.
J'essaierai demain dans la journée le problème des include

Merci d'avoir consacré ton temps.

Je serai de retour sur le forum demain ...

@+
 
Nouveau WRInaute
Voilà, je suis de retour ...

J'ai bien créé le fichier .htaccess à la racine du site, il contient :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index\.php$ /mywebsite/index.php?page=23.1.1.1.1 [L]

Quand je regarde mon site dans le navigateur .... toujours la même url :
http://localhost/mywebsite/index.php?page=23.1.1.1.1

Je ne vois pas où est le problème, avez-vous une idée ?

Merci d'avance.
 
WRInaute passionné
tes pages html contiennent bien le lien /venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.php et pas /mywebsite/index.php?page=23.1.1.1.1
 
Nouveau WRInaute
Bonsoir webmasterlamogere,

Comme indiqué, j'ai remplacé le lien,
au lieu de :
<a href="index.php?page=23.1.1.1.2">texte</a>
j'ai :
<a href="/mywebsite/fr/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php">texte</a>

Le lien dans le navigateur est maintenant :
http://localhost/mywebsite/fr/venezia/r ... ontenu.php

J'affiche bien le contenu mais tout le design a disparu et mon switch dans le fichier index.php (à la source) ne sert plus à rien puisque j'ai maintenant des liens absolus ...
A l'origine, le design et le contenu sont entièrement séparés.

Une idée ?
 
Nouveau WRInaute
Oops ... je pense avoir fait une erreur, je corrige :

au lieu de :
<a href="index.php?page=23.1.1.1.2">texte</a>
j'ai :
<a href="/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php">texte</a>

J'ai le msg d'erreur suivant dans le navigateur :

Warning: include(global.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\index.php on line 2

Warning: include() [function.include]: Failed opening 'global.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\index.php on line 2

Warning: include(/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\index.php on line 7

Warning: include() [function.include]: Failed opening '/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\index.php on line 7

Comme tu le mentionnais, c'est un problème d'include ... quelle règle devrais-je indiquer dans le fichier .htaccess ?
 
WRInaute passionné
l'erreur d'include n'est pas liée au .htaccess
il est important de donner le chemin complet pour les include car sinon il est recherché par rapport au script appelé et pas par rapport au script contenant l'instruction include

Le plus simple est d'utiliser la syntaxe suivante :
Code:
include(dirname(__FILE__) . '/chemin-relatif/fichier.php');
dirname(__FILE__) correspond au chemin du fichier contenant l'instruction include
il faut bien sur remplacer '/chemin-relatif/fichier.php' par le chemin relatif par rapport au fichier contenant l'instruction include
 
Nouveau WRInaute
Internal Server Error => j'avoue être un peu perdu

mywebsite/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.php

Ce fichier index.php contient :
<?php include($langue.'/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php'); ?>

Je devrais donc avoir dans le fichier .htaccess :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index\.php$ /mywebsite/index.php?page=23.1.1.1.1 [L]
include(dirname(__FILE__) . '/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.php');

Je me suis certainement trompé en cours de route mais où ?
 
WRInaute passionné
dans le fichier .htaccess qui se trouve dans le répertoire mywebsite :
Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index\.php$ /mywebsite/index.php?page=23.1.1.1.1 [L]

il faut ensuite que tu remplaces les include comme je t'ai dit pour que les warning disparaissent. En effet, si tu ne donne pas le chemin complet dans tes include, les fichiers sont recherchés dans le répertoire courant. Ce répertoire courant correspond au répertoire du script lancé (dans ce cas le répertoire de index.php soit C:\wamp\www\mywebsite\).

a la ligne 2 de C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\index.php
tu as surement :
Code:
include('global.php');
il recherche le fichier global.php dans le répertoire C:\wamp\www\mywebsite\ et il ne s'y trouve pas!
si il se trouve ici : C:\wamp\www\mywebsite\venezia\reve-sur-eau\san-marco\vert-pourpre-or\xii\global.php
tu peux écrire :
Code:
include(dirname(__FILE__) . '/global.php');
il faut faire pareil pour tous les includes utilisés.
 
Nouveau WRInaute
Dans le fichier global.php qui se trouve dans le répertoire mywebsite, j'ai deux
variables pour éviter de devoir recopier chaque fois le chemin complet et pour que
le site soit portable d'un serveur à l'autre (je n'aurais que ces deux variables
à modifier).

<?php
$lib_path ='http://localhost/mywebsite/';
?>

<?php
$lib_internepath ='C:/wamp/www/mywebsite/';
?>

==========================

Pour te donner une idée, voici l'architecture du site :

mywebsite
- accueil
- venezia
--- reve-sur-eau
------ san-marco
--------- vert-pourpre-or
------------ xii où j'ai le fichier index.php
- fr
--- venezia
------ reve-sur-eau
--------- san-marco
------------ vert-pourpre-or
--------------- xii où j'ai le fichier "index.contenu.php" avec le contenu en français

==========================

Le fichier "index.php" du répertoire "vert-pourpre-or" contenant l' include se présente comme suit :


<?php
include('global.php');
?>

<?php include($langue.'/venezia/reve-sur-eau/san-marco/vert-pourpre-or/xii/index.contenu.php'); ?>

===========================

Le fichier .htaccess est ok
J'ai adapté l'include et ... messages d'erreur dans le navigateur
 
Nouveau WRInaute
Le fichier global.php se trouve bien dans le répertoire C:\wamp\www\mywebsite\ puisqu'il est global pour l'ensemble du site.
Je ne peux quand même pas placer un global dans chaque sous/sous répertoire.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut