Problème de php : conflit avec l'URL Rewriting?

Nouveau WRInaute
Bonjour, je débute en URL Rewriting, et j'aurais besoin d'un petit coup de main.^^ Déjà, voici mon .htaccess :

Code:
RewriteEngine on

RewriteCond %{HTTP_HOST} ^saintseiya.tv$
RewriteRule ^(.*)   http://www.saintseiya.tv/$1  [QSA,L,R=301]

RewriteCond %{HTTP_HOST} ^forum.saintseiya.tv$
RewriteRule ^(.*)   http://www.saintseiya.tv/forum$1  [QSA,L,R=301]

RewriteCond %{HTTP_HOST} ^saintseiya.tv/accueil.php$
RewriteRule ^(.*)   http://www.saintseiya.tv/accueil.html$1  [QSA,L,R=301]


RewriteRule ^(.+)\.html$  site.php?p=$1  [L]
RewriteRule ^(.+)/(.+)\.html$  site.php?d1=$1&p=$2  [L]
RewriteRule ^(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&p=$3  [L]
RewriteRule ^(.+)/(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&d3=$3&p=$4  [L]

En fait, le fichier site.php contient le graphisme du site, et au milieu se trouve un include qui intègre la page voulue du site. Voilà les quelques lignes qui y correspondent :

Code:
<td width="448" class="milieu">
<? @include '/home/web/saintseiya.tv/_administration/pages/milieu.php'; ?>
</td>

Le fichier milieu.php intègre la page au graphisme du site. Exemple : http://www.saintseiya.tv/accueil.html et http://www.saintseiya.tv/accueil.php

Où est le problème? En fait, je voudrais rajouter, juste au-dessus le l'include appelant milieu.php, cette ligne :
Code:
<? @include '/home/web/saintseiya.tv/_administration/pages/titre-rubrique.php'; ?>

Le fichier titre-rubrique.php permet d'appeler l'image titre de la rubrique de façon "automatisée". Seulement, quand je rajoute cette ligne de code dans site.php, c'est l'image correspondant à l'accueil qui s'affiche, et ce quelle que soit la rubrique! Si ça peut aider, voici le contenu de titre-rubrique.php :

Code:
<?     
  
@$dossier = $_GET['d1'];  
  
if ($dossier=='')
	{
	print "<img src='http://www.saintseiya.tv/_administration/images/titre_rubrique-accueil.gif' alt='' width='440' height='30'/>';
	}

else  
	{
	$strimg=''.$dossier.'';
	print "<img src='http://www.saintseiya.tv/_administration/images/titre_rubrique-".$strimg.".gif' alt='' width='440' height='30'/>";  
	}  
  
?>

Et tant qu'on y est, le contenu de milieu.php^^
Code:
<?   

@$dossier = $_GET['d1'];
@$rub = $_GET['d2'];
@$s_rub = $_GET['d3'];
@$pag = $_GET['p'];

if($rub=='')							// Si la variable $rub est vide
	{
	if ($dossier=='')					// Si la variable $dossier est vide
		{
		if($pag=='')
			{
			@include('accueil.php');
			}
		else
			{
			$url=''.$pag.'.php';
			@include ($url);			// On insère page.php
			}
		}
	else
		{
		$url=''.$dossier.'/'.$pag.'.php';
		@include ($url);				// On insère $dossier/page.php
		}
	}  
else								// Si la variable $rub est remplie
	{
	if($s_rub=='')
		{
		$url=''.$dossier.'/'.$rub.'/'.$pag.'.php';
		@include ($url);
		}
	else
		{
		$url=''.$dossier.'/'.$rub.'/'.$s_rub.'/'.$pag.'.php';
		@include ($url);
		}
	}

?>

D'après mes associés, le problème vient d'un conflit avec l'URL Rewriting. Seulement là je suis dépassé.^^ Pourriez-vous m'aider s'il vous plait? Merci beaucoup.
 
WRInaute occasionnel
Je ne vois pas trop à quoi c'est du mais je te dois te prévenir d'une chose dans ton code, quant tu fais ca :
Code:
@$dossier = $_GET['d1']; 
@$rub = $_GET['d2']; 
@$s_rub = $_GET['d3']; 
@$pag = $_GET['p'];
tu récupères les paramètres pour ensuite afficher la page, or tu ne vérifies même pas leur contenu! En faisant cela (et en plus en mettant ton code à découvert) tu t'exposes à de graves risques de hacking. Fais au moins ceci:
Code:
@$dossier = addslashes($_GET['d1']); 
@$rub = addslashes($_GET['d2']); 
@$s_rub = addslashes($_GET['d3']); 
@$pag = addslashes($_GET['p']);
Ce sera une première sécurité.

Deuxièment, si tu enlevais les @ devant tes fonctions, tu pourras voir quelles erreurs sont rencontrées et ça pourrait t'aider un peu je pense...
 
Nouveau WRInaute
Pour ton premièrement : merci, je ne savais pas.^^
Pour le deuxièmement : j'ai enlevé le @ pour l'include concernant l'image, et ça ne change rien^^ Voir mes pages de test : http://www.saintseiya.tv/_administratio ... cueil.html
et http://www.saintseiya.tv/_administratio ... index.html
Bien sûr le dossier test2 contient : site.php, milieu.php, .htaccess, titre-rubrique.php^^

Il y a deux images qui s'affichent c'est normal : celle du haut est "automatisée", celle du bas mise manuellement.

Edit : j'ai aussi enlevé le @ dans titre-rubrique.php, au début je croyais que ça faisait une erreur mais c'était une faute de frappe de ma part, donc mon problème reste le même qu'au début.^^

Edit2 : en fait le script considère $dossier comme vide. Mais pourquoi?
 
WRInaute occasionnel
Apparemment ca viendrait d'un probleme des paramètres non?
Essaie, pour chaque page inclue d'afficher les paramètres, du genre:
Code:
echo "---> début milieu.php<br/>";
echo "d1: ".$_GET['d1']."<br/>";
echo "d2: ".$_GET['d2']."<br/>";
echo "---> fin milieu.php<br/>";";

Tu verras peut-être quel paramètre ne passe pas...
 
WRInaute occasionnel
essaie de remplacer:
Code:
RewriteRule ^(.+)\.html$  site.php?p=$1  [L] 
RewriteRule ^(.+)/(.+)\.html$  site.php?d1=$1&p=$2  [L] 
RewriteRule ^(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&p=$3  [L] 
RewriteRule ^(.+)/(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&d3=$3&p=$4  [L]

par

Code:
RewriteRule ^(.+)/(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&d3=$3&p=$4  [L]
RewriteRule ^(.+)/(.+)/(.+)\.html$  site.php?d1=$1&d2=$2&p=$3  [L] 
RewriteRule ^(.+)/(.+)\.html$  site.php?d1=$1&p=$2  [L] 
RewriteRule ^(.+)\.html$  site.php?p=$1  [L]

dans ton .htaccess, ta première règle est toujours vraie donc tu ne peux pas accéder aux autres... Il faut toujours partir du cas le plus précis, au cas le plus général. (enfin je suis pas sur, je suis pas un pro de l'UR :wink: )
 
Nouveau WRInaute
Cool^^ maintenant il ne trouve pas l'image qui correspond. Mais au moins il la cherche, c'est déjà ça! merci beaucoup en tout cas!

Edit : c'est bon, tout est réglé! Merci beaucoup!!
 
Discussions similaires
Haut