URL Rewriting ne fonctionne qu'à moitier

WRInaute discret
Bonjour à tous,

en partant d'un mod pour phpBB j'ai voulu créé un .htaccess pour ma galerie d'images.

J'ai modifié 2 liens mais seul l'un des 2 fonctionne et pas moyen de trouver pourquoi !?

mon .htaccess (je suis sous OVH) :
Code:
RewriteEngine On
Options +FollowSymlinks
RewriteRule ^galerie_([0-9]*)-.* /tuning/galerie/liste_real.php3?action=detail&id=$1
RewriteRule ^index_([0-9]*)-.* /tuning/galerie/index.php3?cat_id=$1
Il fonctionne parfaitement

Ma fonction au début des pages :
Code:
ob_start();
// Modifie les liens
function rewrite_urls($content) 
{
	$urlin = array(
	"'(?<!/)index.php3\?cat_id=([0-9]*)&amp;url_title=([a-z0-9_\-]*)'",
	"'(?<!/)liste_real.php3\?action=detail&amp;id=([0-9]*)&amp;url_title=([a-z0-9_\-]*)'");

	$urlout = array( 
	"index_\\1-\\2.html",
	"galerie_\\1-\\2.html");

   $content = preg_replace($urlin, $urlout, $content); 
   return $content; 
}

Cette fonction est lancée à la fin des pages de ma galerie par :
Code:
// Modifie les URL
$contents = ob_get_contents();
ob_end_clean(); 
echo rewrite_urls($contents);

Problème :

Tous mes liens du style :
index.php3?cat_id=101&url_title=golf
sont bien transformés style :
index_101-golf.html

Par contre mes liens style :
liste_real.php3?action=detail&id=2&url_title=Manu
ne sont pas changés alors qu'il devrait être comme ça :
galerie_2-Manu.html

--

Et si je regarde dans le code source de cette page par exemple je vois que au lieu d'avoir :
...liste_real.php3?action=detail&id=2&url_title=manu
j'ai
...liste_real.php3?action=detail&id=2&amp;url_title=manu


Et là je ne comprend pas bien pourquoi l'un marque et pas l'autre :roll:
Si quelqu'un a une idée... ;)
 
WRInaute impliqué
C´est ce qu´il y a écrit dans ta fonction php
Tu as du éditer avec un FP ou une daube dans le genre, et a la place de & tu as le caractère décodé de & (donc le code n´est pas bon).
 
WRInaute discret
C'est une autre fonction qui m'ajoute &url_title=blabla à la fin des liens :
Code:
function add_title_in_url ($title = '')
{
	$change_space = "-"; 
	$url_title = $title; 
	if ($url_title != '')
	{
		$url_title = strtolower($url_title); 
		
		// Change specials letters
		$url_title = strtr($url_title,'áâàäéêèëíîìïóôòöúûùüýçñ','aaaaeeeeiiiioooouuuuycn');
		$url_title = preg_replace("/(&gt;|&lt;|&quot;|&amp;)/",$change_space,$url_title);
		$url_title = preg_replace("/[^a-z0-9_\-]/",$change_space,$url_title);

		// Remove multiple $change_space
		$url_title = preg_replace("/[$change_space]+/",$change_space,$url_title);
		
		// Remove $change_space at the begining and at the end of the title
		($url_title{0} == $change_space ? $url_title = substr($url_title,1) : '' );
		($url_title{strlen($url_title)-1} == $change_space ? $url_title = substr($url_title,0, strlen($url_title)-1) : '' );
		
		// Add param "url_title" to the url
		$url_title = "&amp;url_title=" . $url_title;  
	}
	return $url_title;
}
Et en effet c'est bien &amp; qui est marqué mais ce qui n'est pas normal c'est que ça marche pour ma page index.php3 et pas pour ma page list_real.php3 alors que c'est écrit de la même façon !
 
WRInaute passionné
Et si je regarde dans le code source de cette page par exemple je vois que au lieu d'avoir :
...liste_real.php3?action=detail&id=2&url_title=manu
j'ai
...liste_real.php3?action=detail&id=2&amp;url_title=manu
Non.

Regarde bien.

Au lieu d'avoir
...liste_real.php3?action=detail&amp;id=2&amp;url_title=manu
tu as
...liste_real.php3?action=detail&id=2&amp;url_title=manu
si tu n'es pas trop mauvais au jeu des 7 différences (et là il y en a une seule) tu devrais trouver le pb ;)
 
WRInaute discret
Mes lien (côté PHP) sont sous cette forme :
Code:
<a href="liste_real.php3?action=detail&id=<? echo $user_id.add_title_in_url($nom_realis); ?>">...</a>

tu voudrai dire qu'il faudrai que je remplace tous les & par des &amp; dans toutes mes page ? 8O
 
WRInaute passionné
ben déjà, si tu veux être valide html/xhtml, oui.
Sinon, tu changes juste la règle du preg_replace ;) mais c'est pas valide :)
 
Discussions similaires
Haut