2011-08-24 1 views
0

Je suis actuellement en utilisant Apache 2.2Joli URL et URL conviviale pour le référencement?

Je peux faire des choses simples comme

RewriteRule ^/news$ /page/news.php [L] 
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L] 

mais si je veux envoyer 2 paramètres comme celui-ci

http://www.example.com/link/param1/param1_value/param2/param2_value

Enfin, je veux aussi savoir mettre en œuvre une URL conviviale SEO comme stackoverflow

si je peux avoir accès à une page avec l'URL comme

http://www.example.com/doc_no/

décoration Juste cette URL avec

http://www.example.com/doc_no/this-is-the-article

Donne-moi une suggestion avec exemples d'extraits.

Répondre

1

Je sais que le framework PHP symfony vous permet de faire cela.

Comment ça marche: Dans config apache, utilisez mod_rewrite pour rediriger tous les Resquest entrant à un point d'entrée unique (en symfony ce qu'on appelle le « contrôleur frontal »)

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

Dans ce contrôleur avant vous vont créer un objet "Request" qui contient toutes les informations fournies par l'URL.

Par exemple, vous pourriez dire que la première chose après le «/» est le nom du fichier PHP pour appeler et tout le reste sont des paramètres et des valeurs de sorte que: http://example.com/file/id/2 appellera file.php avec id = 2

Pour ce faire, utilisez simplement reg exp et concevez votre classe "Request" avec soin. Pour l'exemple ci-dessus, la classe "Request" doit fournir à la fois les méthodes getRequestedAction() et getParameter (string parameter). La méthode getRequestedAction() sera utilisée lorsque l'objet "Request" est entièrement rempli afin d'appeler le bon fichier/action/méthode.

si vous choisissez de remplir le tableau de paramètres de l'objet de la demande à la fois reg exp sur l'URL et une analyse syntaxique du tableau _GET, vous pouvez arriver au point où: http://example.com/file/id/2 est le même que http://example.com/file?id=2 (et les deux peut travailler)

vous pouvez choisir d'ignorer les extensions (http://example.com/fichier.html est le même que http://example.com/file), ou pas. Enfin, pour certaines URL, vous pouvez choisir d'ignorer tout ce qui se passe après le dernier '/'. Alors que: http://example.com/question/3/where-is-khadafi est le même que http://example.com/question/3/is-linux-better-than-windows

Dans les différents file.php, il suffit d'utiliser $ request-> getParameter (« id ») pour obtenir la valeur du paramètre « id », au lieu d'utiliser le _GET ou _POST tableaux.

Le tout est de

  1. Rediriger tout le trafic entrant vers un « contrôleur frontal »
  2. Dans ce fichier, créer un objet « demande » qui contient toutes les informations nécessaires pour faire fonctionner le site
  3. Appelez le action correcte (fichier php) sur la base des informations contenues dans cette « demande » objet
  4. A l'intérieur des actions, utilisez cet objet de requête pour récupérer les paramètres contenus dans l'URL

Espérons que cela aide

+0

Quelqu'un at-il un exemple de cela? Je voudrais implémenter ce type de configuration mais je suis un peu perdu sur la façon dont le code ressemble réellement au fichier "file.php". –

0

Notez Google have stated qu'ils préfèrent news.php?id=$1 au lieu de news/$1 car il leur est plus facile de détecter la variable. Ceci est plus pertinent lorsque l'on augmente le nombre de variables comme une recherche à votre premier exemple est un peu déroutant:

http://www.example.com/link/param1/param1_value/param2/param2_value 

Vous pouvez toujours combiner les deux si un paramètre est générique comme une catégorie:

http://www.example.com/param1/?id=param2_value 

On devrait vraiment réévaluer la conception si plus d'un paramètre est requis et ce n'est pas une recherche temporaire.

+0

effectivement google veut des variables pour les paramètres non essentiels. si le param définit le contenu que vous récupérez (et non quelque chose comme un identifiant de session qui change sans changer la page), alors une URL amicale est toujours meilleure –

+0

@boomhauer Voir le lien J'ai ajouté: "Bien que nous puissions traiter ceci URL correctement, nous vous déconseillons toujours d'utiliser cette réécriture car il est difficile à maintenir et doit être mis à jour dès qu'un nouveau paramètre est ajouté à l'URL dynamique d'origine. " –

+0

ouais vrai ... mais alors leur indexeur traite l'URL amicale est beaucoup mieux que non, donc je suppose que la preuve est .. :) –

Questions connexes