Url Rewriting marche à moitié

Mammouth du PHP | 643 Messages

29 nov. 2015, 01:16

Salut j'ai mon code qui permet de ré écrire mon url en fonction du choix fait par l'utilisateur
Ca marche très bien pour la région mais pas pour le département .....

htaccess.
#--------------------------------------------------
# R�gles de réécriture d'URL :
#--------------------------------------------------

# Recherche
RewriteCond %{QUERY_STRING} ^q=
RewriteRule ^(index\.php)?$ recherche.php [L] 

RewriteRule ^toutes-les-sorties-en-region-([A-Za-z0-9_-]+)-du-departement-([0-9]{2}).html$ sortie.php?region=$1&departement=$2
RewriteRule ^toutes-les-sorties-en-region-([A-Za-z0-9_-]+).html$ sortie.php?region=$1
RewriteRule ^toutes-les-sorties.html sortie.php
#RewriteRule ^([A-Za-z0-9_-]+).html$ $1.php
Ca va pas beaucoup vous aidé mais peut etre à comprendre comment ma page est construite.
Voici par exemple pour récupérer mon titile
// Title
	$region_id = !empty($_REQUEST['region']) ? regionByUrl($_REQUEST['region']) : NULL;
	$titre = !empty($_REQUEST['region']) ? " Sortir en ".$aRegion[$region_id] : 'Tous les bons plans pour sortir'.$aDepartement[$_REQUEST['departement']]; // Sortir en "nom de la région"
	$titre .= !empty($_REQUEST['loisir']) ? " - ".$aLoisirs[$_REQUEST['loisir']] : NULL; // Choix du type d'évènement
	$titre .= !empty($_REQUEST['departement']) ? ' en '.$depts[$_REQUEST['departement']] : NULL; // Le département
Donc ca marche pour par exemple:
http://site.fr/toutes-les-sorties-en-re ... alpes.html

Mais je n'arrive pas a rajouté du coup le département à la suite genre:
http://site.fr/toutes-les-sorties-en-re ... isere.html
Merci encore

Mammouth du PHP | 2703 Messages

29 nov. 2015, 01:34

toutes-les-sorties-en-region-([A-Za-z0-9_-]+)-du-departement-([0-9]{2}).html
toutes-les-sorties-en-region-rhone-alpes/isere.html
pas de correspondance donc cela ne peut pas marcher
toutes-les-sorties-en-region-rhone-alpes-du-departement-38.html sera mieux pour valider la règle.

Mammouth du PHP | 643 Messages

29 nov. 2015, 11:53

Mais c'est au niveau de l'indexation ou je bloque.
Je tape google " sortir en rhone alpes" on me trouve et si je tape "sortir en isère" on me trouve pas.
La page existe depuis plusieurs mois.
Exemple sortir en rhone alpes:
http://lasortie.fr/toutes-les-sorties-e ... alpes.html
la balise title donne Sortir en Rhône-Alpes

Si je tape sortir en isère on ne me trouve pas.
J'ai ma page selon mes filtres qui affiche la bonne balise title exemple : <title>Tous les bons plans pour sortir en Isère - lasortie.fr</title>

Mais le problème vient peut etre du à l'url rewriting.
parceque le l'url ne change pas elle reste torjours http://lasortie.fr/sortie.php

Si vous pouvez essayer avec différents département svp afin de vous rentre compte du problème éventuel.
Merci encore ;)

Mammouth du PHP | 643 Messages

29 nov. 2015, 12:43

Donc je continue d'essayer de trouver une solution à mon problème afin d'avoir une page du type:
lasortie.fr/toutes-les-sorties/isere.html

lasortie.fr/toutes-les-sorties/bordeaux.html ( bah oui faut adapter ça au villes aussi )

Donc pour les département j'ai fait ceci:
RewriteRule ^toutes-les-sorties-du-departement-([0-9]{2}).html$ sortie.php?departement=$1

Ce qui marche pour une url:
lasortie.fr/toutes-les-sorties-du-departement-38.html

Mais je souhaite le nom du département et pas son numéro
Et comment adapter également pour les villes ???

Ma requete pour affiche mes annonces sur l'autre page est la suivante:
$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
	
    $sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`id_type_loisirs` = "'.$_REQUEST['loisir'].'"' : NULL;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 nov. 2015, 15:58

salut,

tu peux mettre de alternative dans ton expression régulière et du coup chercher
toutes-les-sorties-du-departement-([0-9]{2} ou un chaine de caractère).html

cela te permet d'avoir un seul script derrière (a toi de vérifier si c'est une chaîne de caractère ou des chiffres.

Juste au passage tu es au courant qu'il y a des départements à trois numéros (DOM) et des départements avec des lettres (corse) ? :)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 643 Messages

29 nov. 2015, 21:09

Donc en fait voilà je vais essayer d'etre plus clair.
PS: J'ai créer 2 sujets différents car c'est éventuellement 2 solutions différentes, j'espère avoir bien fait.

Donc pour mon htaccess., tout marche très bien sauf une ligne
Mon code est:
#--------------------------------------------------
# R�gles de réécriture d'URL :
#--------------------------------------------------

# Recherche
RewriteCond %{QUERY_STRING} ^q=
RewriteRule ^(index\.php)?$ recherche.php [L] 

RewriteRule ^toutes-les-sorties-en-region-([A-Za-z0-9_-]+)-du-departement-([0-9]{2}).html$ sortie.php?region=$1&departement=$2
RewriteRule ^toutes-les-sorties-en-region-([A-Za-z0-9_-]+).html$ sortie.php?region=$1
RewriteRule ^toutes-les-sorties-du-departement-([0-9]{2}).html$ sortie.php?departement=$1
RewriteRule ^toutes-les-sorties.html sortie.php
#RewriteRule ^([A-Za-z0-9_-]+).html$ $1.php
Et la ligne qui marche pas est:
RewriteRule ^toutes-les-sorties-en-region-([A-Za-z0-9_-]+)-du-departement-([0-9]{2}).html$ sortie.php?region=$1&departement=$2

Par contre en tapant l'url ca marche
http://lasortie.fr/toutes-les-sorties-e ... nt-38.html
Mais moi je souhaite que le filtre de ma liste déroulante renvoi du coup sur la bonne url
mais il reste toujours sur la meme page.

Code de la liste déroulante:
<form id="choice"  name="liste deroulante" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
                
            		<div class="col-md-3 col-sm-3 max">
                            <?php // Gestion des variables des départements
                            $region = !empty($_SESSION['membre']['id_region']) ? simplification($aRegion[$_SESSION['membre']['id_region']]) :NULL;
                            $region = !empty($_REQUEST['region']) ? $_REQUEST['region'] : $region; /* Si la region est renseigné dans l'url il est prioritaire */
                            $departement = !empty($_SESSION['membre']['id_departements']) ? $_SESSION['membre']['id_departements'] : NULL;
                            $departement = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : $departement; /* Si le departemebt est renseigné dans l'url il est prioritaire */
                            ?>
                            
                            <select name="departement" id="departement" class="selectpicker max" data-region="<?php echo $region; ?>">
                            <option value="">Votre département</option>
                            <?php echo aRegionDepartement($region, $departement); ?>
                            
                            </select>

Mammouth du PHP | 2703 Messages

29 nov. 2015, 22:02

<form id="choice" name="liste deroulante" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
c'est donc normal que cela renvoie vers la mêm url.
il faut donc changer en javascript le champ action de ton formulaire selon la selection des listes.

mais le plus simple, c'est de renvoyer ton formulaire vers /recherche par exemple, et de faire des liens vers les urls /toutes-les-sorties-en-region-rhone-alpes-du-departement-38.html dans tes pages pour que les moteurs les trouvent et puissent indexer ces urls.
un moteur ne va pas indexer une url en méthode post.

Mammouth du PHP | 643 Messages

29 nov. 2015, 22:26

Salut à toi Or, merci de ton investissement. Tu a tout à fait compris ce que je souhaitais.
les redirections et bien sur l'indexation par les robots.
Peut tu m'aider sur le sujet afin de partir sur les bonne base stp

Actuellement le code source de liste généré nous donne quelque chose comme:
<select name="departement" id="departement" class="selectpicker max" data-region="">
                            <option value="">Votre département</option>
                            <optgroup label="Alsace">
<option value="67">67 - Bas-Rhin</option>
<option value="68">68 - Haut-Rhin</option>
</optgroup>
Peut on par exemple récupérer le contenu de value
Et après comparer dans un tableau si ca vaut 67 = alors bas-rhin .....

Après pour la redirection et tout la je ....

Sinan dans ma page recherche actuellement je récupérer le nom du département choisi par l'utilisateur avec:
$h1 .= !empty($_REQUEST['departement']) ? ' - '.$depts[$_REQUEST['departement']]: NULL; // Le département
Je souhaite partir sur de bonne base pour pas me perdre, merci de ton aide :wink:
Modifié en dernier par yoann38 le 29 nov. 2015, 22:51, modifié 1 fois.

Mammouth du PHP | 2703 Messages

29 nov. 2015, 22:50

tu te compliques la vie pour rien. google na va pas valider ton formulaire. tu le passes en get vers une url fixe, et tu auras des paramètres, ce qui n'est pas gênant, car seuls des humains verront ces liens.

dans la page d'une sortie, tu ajoutes un fil d'ariane, ce qui te permettra d'avoir un lien vers les sorties d'une région, un lien vers les sorties du département voir un lien vers les sorties de la commune.

Mammouth du PHP | 643 Messages

29 nov. 2015, 22:52

Bon je vois que tu ma compris mais j'ai du mal à me lancer pourtant ce n'est pas l'envie qui me manque.
Je ne vois pas comment partir.
Ta tout dis departement et commune c'est ce que je vise
...

Mammouth du PHP | 2703 Messages

29 nov. 2015, 22:57

tu as sur la fiche d'une sortie :
278 annonces pour savoir ou sortir - Rhône-Alpes - Isère
il te reste plus qu'à ajouter les liens sur Rhône-Alpes et sur Isère, et pour les communes qui ont plus d'un certain nombre d'événements, la ville avec son lien.

Mammouth du PHP | 643 Messages

30 nov. 2015, 00:05

C'est à ma portée ca.

Dans mon <h1> par exemple j'ai modifié mon code est rajouté cette ligne:
$h1 .= !empty($_REQUEST['departement']) ? ' <a href="toutes-les-sorties-du-departement-'.$_REQUEST['departement'].'.html"> '.$depts[$_REQUEST['departement']].'</a>': NULL; // Le département
Du coup on a un lien sur le h1
Et j'aimerais que lorsque l'utilisateur selectionne via la liste déroulante le département qu'il soit redirigé en fonction sur l'url qui correspond.
Si possible j'aimerais faire pareil avec les commune mais ne vois pas du tt comment ?

Mammouth du PHP | 643 Messages

30 nov. 2015, 21:27

Re,
Donc j'essai toujours de m'en sortir avec ce formulaire.

J'ai donc modifier mon htaccess.
Pas de problème de ce coté la

Et coté script php
J'ai donc modifier mon champ action comme conseillé en faisant donc ceci:
En Gros si un département est selectionné alors on agit sur la page suivant le département sinon on prend la page par default.
PS: Le problème c'est que actuellement j'ai récupère le département dans mon champ action au moment de l'envoi il faudrait que je le récupère au clik ou autrement.....
Comment procéder svp ?
Ou une autre méthode ?
<form id="choice" name="liste deroulante" method="post" action="<?php if (empty($_POST['departement'])) echo $_SERVER['REQUEST_URI']; else { echo '/toutes-les-sorties-du-departement-'.$_POST['departement'].'.html'; } ?>">
    
            		<div class="col-md-3 col-sm-3 max">
                            <?php // Gestion des variables des départements
                            $region = !empty($_SESSION['membre']['id_region']) ? simplification($aRegion[$_SESSION['membre']['id_region']]) :NULL;
                            $region = !empty($_REQUEST['region']) ? $_REQUEST['region'] : $region; /* Si la region est renseigné dans l'url il est prioritaire */
                            $departement = !empty($_SESSION['membre']['id_departements']) ? $_SESSION['membre']['id_departements'] : NULL;
                            $departement = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : $departement; /* Si le departemebt est renseigné dans l'url il est prioritaire */
                            ?>

                            <select name="departement" id="departement" class="selectpicker max" data-region="<?php echo $region; ?>">
                            <option value="">Votre département</option>
                            <?php echo aRegionDepartement($region, $departement); ?>
                            </select>
En fouillant un peu j'ai trouvé ceci:
<select onchange="alert(this.options[selectedIndex].value);" name="departement" id="departement" class="selectpicker max" data-region="<?php echo $region; ?>">
Donc en faisant un alert ca marche le tout est de savoir comment associer ce on change avec mon champ action de mon formulaire ?