Redirection 301 url rewriting avec mots clés

WRInaute occasionnel
Bonsoir,
Bon j'ai passé une dure journée à coder un système de news avec résumé, les titres envoient vers une page par news. Ensuite j'ai voulu faire de l'url rewriting sur les pages de news. J'ai lu les explications de WRI, ça m'a permis d'obtenir ce code :
RewriteEngine On
Code:
Options +FollowSymlinks
RewriteRule ^news-([0-9]+)-([a-zA-Z0-9\-]+)\.html$ /index.php?id=$1&titre=$2 [L]
J'obitens donc des url du type :
http://www.monsite.com/news-28-11-titre-de-la-news.html
(si le format vous parait bizarre, je veux bien des conseils :) J'ai choisi le mot news+id de la news+année et titre)

Mais pour la redirection 301, je bloque. J'ai trouvé cet article qui permet de comprendre certaines choses, mais apparemment le code ne fonctionne pas pour les url avec mots clés. J'ai testé effectivement ça ne fonctionne pas quand il y a plusieurs "$".

Il n'y a aucun moyen via .ht access ?
Ensuite j'ai lu un tas d'autres articles et apparemment le php est une solution, mais mes essais n'ont pas été concluants.
Par exemple ce code :
Code:
<?php
$url_attendue = get_lien_article($_GET['id']);
$url_reelle = $_SERVER['REQUEST_URI'];
if ($url_attendue != $url_reelle) {
  header('Status: 301 Moved Permanently', false, 301);
  header('Location: ' . $url_attendue);
  exit;
}
?>
Faut-il lancer un appel à la bdd au tout début de la page ? Je comprend mal la ligne " get_lien_article($_GET['id']);"

Sinon j'ai trouvé ça :
Code:
<?php

      $URi = $_SERVER["REQUEST_URI"];

          $motif = "'(/index\.php\?id=)+([0-9]+)'";
          if (preg_match($motif,$URi,$capture))
          {
          header("Status: 301 Moved Permanently");
          header("Location: http://www.site.com/index-$capture[2].html");
          exit;
          }

?>
J'ai du mal à l'adapter également...

Je peux aussi essayer de simplifier mes adresses sans id des news, mais c'est pas une bonne idée je crois.
Bonne soirée/nuit !
 
WRInaute accro
Doubrovski a dit:
J'ai testé effectivement ça ne fonctionne pas quand il y a plusieurs "$".
ça veut dire quoi "ça ne fonctionne pas" ? quelle url as-tu en entrée ? que veux tu obtenir et qu'obtiens-tu ?
 
WRInaute accro
Doubrovski a dit:
Faut-il lancer un appel à la bdd au tout début de la page ? Je comprend mal la ligne " get_lien_article($_GET['id']);"

Ce qu'il faut retenir et qui est "universel" dans ce script c'est :

header('Status: 301 Moved Permanently', false, 301);
header('Location: ' . $url_attendue);
exit;

qui renvoie une entête 301 sur la demande de l'url en cours et renvoie l'utilisateur sur la bonne page (header('Location: ' . $url_attendue);)

ensuite pour ce qui est de la base ça dépend de ton système, ce n'est pas forcement nécessaire.

get_lien_article($_GET['id']); est censé être un appel de fonction qui renvoie une url d'un article don l'id en base est dans le paramètre GET nomé id ($_GET['id']).

cette fonction fait peut être appel a une base en effet. Le scripte complet dit donc que si l'url demandé (via navigateur) n'est pas sous la forme de l'url ré-écrite fournie par "get_lien_article" alors renvoie vers la page definitive (donc l'url qu'a calculé "get_lien_article") en disant (301) que la page est déplacée.

Dans ton cas tu semble parler d'un système de news que tu viens de créer donc a priori je ne voie pas l'utilité de renvoyer des anciens article avec des urls à paramètre qui n'existent pas encore vers les nouvelles. Donc je ne voie pas l'utilité d'une 301. S tel est le cas il faut juste que tes liens internes soit sous la forme définitive et il seront indexés comme tel.
 
WRInaute occasionnel
Merci !
D'accord je vais continuer à tester, je crois que là où je bloque, c'est pour retranscrire l'adresse avec les variables d'url en php. Je dois faire une faute quelque part.


ça veut dire quoi "ça ne fonctionne pas" ? quelle url as-tu en entrée ? que veux tu obtenir et qu'obtiens-tu ?
Et bien le "&rewriting" s'inscrit dans l'adresse, donc le lien est foireux ainsi que la redirection. Par contre la réécriture fonctionne toujours.

Voilà le code que j'avais testé (de mémoire) :
Code:
RewriteEngine on

RewriteCond %{QUERY_STRING} ^id=(.*)&titre=(.*)$
RewriteRule ^index\.php$ /news-%1&-%2.html? [R=301,L]

RewriteRule ^news-([0-9]+)-([a-zA-Z0-9\-]+)\.html$ /index.php?id=$1&titre=$2&rewriting [L]

Dans ton cas tu semble parler d'un système de news que tu viens de créer donc a priori je ne voie pas l'utilité de renvoyer des anciens article avec des urls à paramètre qui n'existent pas encore vers les nouvelles. Donc je ne voie pas l'utilité d'une 301. S tel est le cas il faut juste que tes liens internes soit sous la forme définitive et il seront indexés comme tel.
C'est totalement inutile de rendre inaccessibles les url avec id ? Je sais qu'il y a peu de chances d'avoir des problèmes puisque les liens du site ne mènent pas vers ces pages. Mais je sais pas.

Sinon j'essaye de simplifier les variables des url, je ne vais en avoir qu'une seule finalement.
 
Discussions similaires
Haut