8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé une page qui m'affiche certaine info dynamiquement en récupérant un élément dans l'url.

Donc l'adresse d'origine : -http://www.xcelcam.com/FR/accessoires/accessoires.php?kit=sport
sur laquelle j'ai fait un rewriting et qui se change en: -http://www.xcelcam.com/FR/accessoires/accessoires-sport.html

Le problème c'est que dans ma page je récupère l'info à l'aide d'un $_GET. et donc, une fois le rewritting mis en place au lieu ne me renvoyer "sport", ça me renvoie accessoires-sport. Normale, sauf que j'ai juste besoin de "sport".

Comment fait-on pour seulement récupéré cette partie dans l'url?
Apoooo a écrit :
Ou si ton URL a toujours :
http://www.xcelcam.com/FR/accessoires/accessoires-sport.html

Tu peux changer ta règle d'URL Rewriting :
^accessoires/accessoires-([a-zA-Z]+).html

Comme ça il te renvoi que le kit.

C'est à peu près ce que j'ai fais dans mon htaccess
RewriteRule ^EN/accessories/([a-z]+)-accessories\.html$ /EN/accessories/accessories.php?kit=$1 [L]
RewriteRule ^FR/accessoires/accessoires-([a-z]+)\.html$ /FR/accessoires/accessoires.php?kit=$1 [L]

sauf que dans ma page avec un $_GET ça me renvoie "accessoires-sport" au lieu de juste "sport"...

J'avais "localiser" explode, mais je n'ais pas encore tout compris, je vais y retourner
juliesunset a écrit :

C'est à peu près ce que j'ai fais dans mon htaccess
RewriteRule ^EN/accessories/([a-z]+)-accessories\.html$ /EN/accessories/accessories.php?kit=$1 [L]
RewriteRule ^FR/accessoires/accessoires-([a-z]+)\.html$ /FR/accessoires/accessoires.php?kit=$1 [L]

sauf que dans ma page avec un $_GET ça me renvoie "accessoires-sport" au lieu de juste "sport"...

J'avais "localiser" explode, mais je n'ais pas encore tout compris, je vais y retourner


C'est étonnant comme comportement. Bon, j'ai quelques difficultés avec l'URL Rewriting, quelqu'un d'autre saura surement t'éclairer car moi je vois pas trop pourquoi il te renvoi le mot "accessoires"...

Pour l'explode, c'est très simple :

$texte = "Je suis une phrase";
$mots = explode(" ", $texte);

/*explode retourne un tableau de chaines de caractères qui sont obtenu avec le séparateur renseigné en argument 1, ici " " qui est un espace.
*/

echo $mots[0]; // Affiche "Je";
echo $mots[1]; // Affiche "suis";
echo $mots[2]; // Affiche "une";
echo $mots[3]; // Affiche "phrase";

Modifié par Apoooo (21 Jun 2013 - 10:47)
Ok, c'est vraiment bizarre, parce que normal s'il ne récupère pas la bonne info ça devrait au moins m'afficher ce qui ce trouve dans les else. Hors ce n'est pas le cas, ça n'affiche que "accessoires-sport" et rien d'autre!

je vous mets mon code:
<?php
$kit = explode("-",$_GET['kit']);

$search = array('sport','chasse');
$replace = array('sport','hunt');
$ensemble = str_replace($search, $replace, $kit[2]);

$preprocess['title'] = " - Ensemble d'accessoires de ".$kit[2]."";
if($kit[2] == 'sport'){
	$preprocess['meta']['description'] = "Accessoires d'alimentation disponible pour la caméra vidéo XCEL™ HD, télécommande, adaptateurs, câbles et piles.";
}
if($kit[2] == 'chasse'){
	$preprocess['meta']['description'] = "Accessoires disponible pour la caméra vidéo XCEL™ HD, cartes micro-SD et lecteur de cartes.";
}

$preprocess['mainid'] = "accessoires";

require_once($_SERVER['DOCUMENT_ROOT'] . "/includes/topFr3.inc.php");
?>
	<h1>Ensemble d'accessoires de <?php echo $kit[2]; ?></h1>
    <section class="presentation">
    	<?php
		if($kit[2] == 'sport'){
		?>
    	<p>Idéal pour les activités sportives et de plein air.</p>
        <p>L’ensemble d’accessoires de sport vous permettra de capturer de belles images dans une grande variété d’activités sportives. Parfait pour fixer votre caméra <span class="mc">XCEL</span> sur une voiture, un bateau, un vélo, un véhicule tout-terrain, un casque et bien plus encore. Comprend 6 accessoires de fixation et un boitier transparent étanche.</p>
        <?php
		}
		else{
		?>
    	<p>Idéal pour la chasse et les activités de plein air</p>
        <p>Parfaits pour la chasse ou toutes autres activités de plein air, ces accessoires vous permettront de capturer des images avec une bonne stabilité à chaque fois. Vous pouvez fixer votre caméra à un arc ou à un télescope. Vous pouvez également filmer durant votre chasse avec le support frontal soit attaché sur vous ou sur une autre personne pour ainsi vous filmer en action. Cet ensemble d’accessoires est le meilleur ami du chasseur! Il vous permet de rejouer vos meilleurs moments et de pouvoir les partager avec tout le monde.</p>
		<?php
		}
		?>
        <p>Chaque item est également disponible individuellement.</p>
    </section>
	<section class="select">
<?php
$req = mysql_query( 
			"SELECT 
				P.`id`, 
				P.`produits`, 
				P.`nom`,
				D.`smallFR`,
				D.`caracteristiqueFR`,
				D.`installationFR`,
				D.`noteFR`,
				IP.`lien`,
				IP.`photo`,
				IP.`id` as `id_photo`
			FROM `produits` P
			LEFT JOIN `categories` C
				ON P.`id_categories` = C.`id`
			LEFT JOIN `descriptions` D
				ON D.`id_produits` = P.`id`
			LEFT JOIN `photos_produits` IP
				ON IP.`id_produits` = P.`id`
			WHERE P.`etat` = 'actif'
				AND P.`ensemble` = '".$ensemble."' 
			GROUP BY P.`produits`
			ORDER BY P.`nom`") or die("45 - ".mysql_error());
while ($info = mysql_fetch_assoc($req)){
	?>
		<article id="<?php echo $info['produits'];?>" class="popup">
			<img src="/images/<?php echo $info['lien'].$info['photo']?>.png" width="100" alt="" />
            <h1><?php echo $info['nom'];?></h1>
		<?php
		$am = explode("\r\n", $info['caracteristiqueFR']);
		$bm = explode("\r\n", $info['smallFR']);
		$cm = explode("\r\n", $info['installationFR']);
		if($info['produits'] == 'XHD-CAM3' || $info['produits'] == 'XHD-FAM3'){
			if(!empty($info['smallFR'])){
				echo('<p>');
				foreach($bm as $b) {
					echo (stripslashes($b).'<br>');
				}
				echo('</p>');
			}
		}
		else{
			if(!empty($info['caracteristiqueFR'])){
				foreach($am as $a) {
					echo ('<p>'.stripslashes($a).'</p>');
				}
			}
		}
		?>
			<div class="descr">
            	<a class="right close ico_close" title="fermer" aria-hidden="true"><span class="visuallyhidden">fermer</span></a>
				<h2><?php echo $info['nom'];?></h2>
                <div class="left">
				<?php
				$q = mysql_query( 
						"SELECT II.`installation`
						FROM `photos_produits` IP
						LEFT JOIN `photos_installations` II
							ON II.`id_photo` = IP.`id`
						WHERE IP.`id_produits` = '".$info['id']."'") or die("90 - ".mysql_error());
				while ($photo = mysql_fetch_assoc($q)){
					?>
				<?php
                	if(!empty($photo['installation'])){
						if($info['produits'] == 'XHD-S90E' || $info['produits'] == 'XHD-CM'){
                    ?>
					<img src="/images/<?php echo $info['lien'].$info['photo'].$photo['installation']?>.png" alt="" class="exception">
                    <?php
						}
						else{
                    ?>
					<img src="/images/<?php echo $info['lien'].$info['photo'].$photo['installation']?>.png" alt="" />
                    <?php
						}
					}
					else{
					?>
					<img src="/images/<?php echo $info['lien'].$info['photo']?>.png" alt="" />
                    <?php
					}
				}
				?>
				</div>
                <div class="left texte">
                <?php
                if($info['produits'] == 'XHD-CAM3' || $info['produits'] == 'XHD-FAM3'){
					if(!empty($info['smallFR'])){
						echo('<p>');
						foreach($bm as $b) {
							echo (stripslashes($b).'<br>');
						}
						echo('</p>');
					}
				}
				else{
					if(!empty($info['caracteristiqueFR'])){
							foreach($am as $a) {
								echo ('<p>'.stripslashes($a).'</p>');
							}
						}
				}
                if(!empty($info['installationFR'])){
                	echo ('<h3>Installation:</h3>');
					echo('<ol>');
					foreach($cm as $c) {
                    	echo '<li>'.(stripslashes($c).'</li>');
					}
					echo('</ol>');
				}
				
				$q = mysql_query("SELECT complementaire FROM photos_complementaires WHERE id_photo = '".$info['id_photo']."'") or die("130 - ".mysql_error());
				while ($photo = mysql_fetch_assoc($q)){	
					if(!empty($photo['complementaire'])){
					?>
					<img src="/images/<?php echo $info['lien'].$info['photo'].$photo['complementaire']?>.png" width="150" alt="" />
						<?php
					}
				}
                if(!empty($info['noteFR'])){
                	echo '<p class="clear">* '.$info['noteFR'].'</p>';
                }
                ?>
                	<p><?php echo '(#'.$info['produits'].')';?></p>
				</div>
			</div>
		</article>
	<?php
}
?>
	</section>
    
<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/includes/bottomFr2.inc.php"); ?>



Je me demande également s'il n'y aurais pas un conflit au niveau du rewritting avec une autre page...
mon htaccess:
Options +FollowSymlinks

RewriteEngine on
### RewriteCond %{REQUEST_URI} !/index.html$
### RewriteCond %{REMOTE_ADDR} !^74\.221\.31\.251
### RewriteRule $ /index.html [R=302,L]

RewriteBase /

###########################################################
###
###  Redirections internes
###
###########################################################

RewriteRule ^EN/accessories/(.*)\.html$ /EN/accessories/index.php?categories=$1 [L]
RewriteRule ^FR/accessoires/(.*)\.html$ /FR/accessoires/index.php?categories=$1 [L]

RewriteRule ^EN/accessories/([a-z]+)-accessories\.html$ /EN/accessories/accessories.php?kit=$1 [L]
RewriteRule ^FR/accessoires/accessoires-([a-z]+)\.html$ /FR/accessoires/accessoires.php?kit=$1 [L]

Modifié par juliesunset (21 Jun 2013 - 15:05)
Bonjour,
Comme tu as mis à la fin de tes règles "[L]" dans le .htaccess, cela signifie que si il matche une règle, il n'en tente pas d'autres.
Il faut donc aller de la règle la plus précise à la moins précise.

Hors, dans ton cas, il va d'abord matcher avec :
RewriteRule ^FR/accessoires/(.*)\.html$ /FR/accessoires/index.php?categories=$1 [L]

puisqu'il a bien une url qui répond bien à ce que tu demandes (http://www.xcelcam.com/FR/accessoires/accessoires-sport.html comporte bien l'arborescence FR/accessoires, et est suivie "de n'importe quoi.html"), alors que toi tu t'attends à ce qu'il matche avec:
RewriteRule ^FR/accessoires/accessoires-([a-z]+)\.html$ /FR/accessoires/accessoires.php?kit=$1 [L]


Essaye d'inverser les deux règles dans ton .htaccess