2010-06-22 9 views
2

Lorsque je clique sur une section de commentaires pour une entrée donnée sur un site que j'ai, l'URL ressemble à ceci:Faire une URL réécriture en utilisant la méthode GET PHP

http://www...com/.../comments/index.php?submission=Portugal%20Crushes%20North%20Korea&submissionid=62&url=nytimes.com/2010/06/22/sports/soccer/22portugalgame.html?hpw&countcomments=3&submittor=johnjohn12&submissiondate=2010-06-21%2019:00:07&dispurl=nytimes.com

Je veux la faire ressembler à cette URL:

http://www...com/.../comments/Portugal-Crushes-North-Korea-62

Je comprends que cela implique d'ajouter des règles au fichier .htaccess. J'ai deux questions:

  1. Depuis que je suis en utilisant la méthode GET en PHP, l'URL laid a un tas de variables qui y sont jointes. Je ne veux pas que toutes ces variables apparaissent dans l'URL propre. Est-il possible d'inclure seulement quelques-unes des variables dans l'URL propre mais toujours avoir une règle qui le dirige vers une URL moche avec toutes les variables?

  2. Une fois les règles .htaccess écrites, dois-je revenir en arrière et modifier les liens dans le code source pour rediriger vers les URL propres? Si oui, comment puis-je faire cela en utilisant la méthode GET quand l'URL propre n'a pas toutes les variables que je veux transmettre?

Merci à l'avance,

John

Répondre

0

Non, vous ne pouvez pas laisser les variables hors et s'attendre à passer de toute façon. Si vous faites cela, l'information n'est plus dans l'URL, donc vous n'avez pas le moyen de l'obtenir.

Vous pouvez utiliser post au lieu de get si vous voulez passer des variables sans qu'elles n'apparaissent dans l'URL.

+0

Comment faire POST lorsque le chemin pour accéder à la section des commentaires est juste un hyperlien encre? – John

+0

@John: Vous ne pouvez pas. –

3

Je ne sais pas pourquoi vous avez besoin de toutes ces données dans l'URL. Vous devriez stocker des choses comme le titre de la soumission, sa date et son auteur dans une base de données, puis vous y référer avec un ID. De cette façon, vos URL sera plus courte et plus jolie:

http://www.example.org/article.php?id=1

http://www.example.org/article/1/

Vous pouvez accomplir cela avec un simple RewriteRule dans votre fichier .htaccess, comme ceci:

RewriteEngine On 
RewriteRule ^articles/([0-9]+)/ article.php?id=$1 
+0

Merci ... En fait, j'ai moi-même eu cette idée avant de voir votre commentaire. Je pense que je vais aller dans cette direction. – John

0

Je me joins le mot de Sjoerd, mais il y a beaucoup de façons de réécrire votre URL comme vous le souhaitez!

Apache et (IIS aussi) prend en charge les URL s comme celui-ci: http://example.com/index.php/my-rewritten-url_62

function URISegment($segment) 
{ 
    $uri_array = explode('/',$_SERVER['REQUEST_URI']); 
    $uri_count = count($uri_array); 
    $returning_uri = array(); 

    for($i = 0;$i<$uri_count;$i++) 
    { 
     if(empty($uri_array[$i]) || $uri_array[$i] == "index.php") 
      unset($uri_array[$i]); 
     else 
      array_push($returning_uri,$uri_array[$i]); 
    } 

    if($segment < count($returning_uri)) 
     return $returning_uri[$segment]; 
    else 
     return false; 
} 

Cela fonctionne, mais vous devez définir aussi l'url de base, et cela doit être appelé au début de la fichier, et mis en œuvre à chaque appel d'image, de script, etc.

function BaseURL() 
{ 
    if(isset($_SERVER['HTTP_HOST'])) 
    { 
     $base = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http'; 
     $base .= '://'. $_SERVER['HTTP_HOST']; 
     $base .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); 
    } 
    else 
    { 
     $base = 'http://localhost/'; 
    } 
    return $base; 
} 

Après cela, vous pouvez utiliser au lieu de ceci:

// http://example.com/?MyKey=Some-data 
$MyKey = $_GET['MyKey']; //which is the first item 
echo $MyKey; 
// results: Some-data 

Ce:

// http://example.com/?MyKey=Some-data 
$MyKey = URISegment(0); 
echo $MyKey; 
// results: Some-data 

Vous avez le même résultat par chacun.

PS:

J'aime cette solution parce que je peux mélanger les types d'URL comme je l'ai besoin d'eux comme:

example.com/index.php/index/evaled-article?some=db-stored&code=snipplet 

Et bien sûr, vous pouvez réécrire votre URL comme FRKT dit :)

Et bien sûr, si vous voulez cacher le index.php vous devez utiliser mod_rewrite, car il n'y a aucun moyen

+0

Ce n'est pas très joli. Pourquoi ne pas utiliser mod_rewrite (ou équivalent d'IIS)? –

+0

Pourquoi n'est-ce pas joli? C'est une jolie solution pour le problème qu'il a énuméré. Je pense que c'est un moyen très utile de réécriture d'url, et l'autre chose, maintenant il a un nouvel aspect comment cela peut être fait, en utilisant seulement php –

+0

Je ne suis pas sûr que cela tombe dans la catégorie de réécriture d'URL, mais je suis d'accord une bonne alternative pour les personnes qui ne peuvent pas utiliser mod_rewrite. :-) –

Questions connexes