2011-08-15 3 views
0

J'essaye de créer un script de routage d'url pour mon nouveau CMS mais je dois avouer que regex n'est pas mon côté fort. Jusqu'à présent, je continue à courir dans les erreurs ou aucun résultat.Url routing regex help

Ce que je suis en train d'accomplir est d'utiliser certaines balises comme :id:year:slug etc ...

Quelqu'un peut-il me aider ou me guider vers la bonne direction avec ce qui est de savoir comment utiliser preg_match ou similaire fonctions pour trouver le bon "modèle d'URL"? Google n'a pas été fait, il travail pour une fois: S

AJOUTÉE

Exemple url http://www.mysite.com/post/2011/08/15/title-of-a-blogg-post/

Si j'ai une base de données de route et un modèle est par exemple post/:year/:month/:day/:slug je veux qu'il corresponde à ce modèle et appeler un certain contrôleur, action et dans cet exemple un certain article.

Le tableau regex i créé ressemble

$patterns = array(
    ":id"    => "/^[0-9]*$/", 
    ":year"    => "/^([0-9]{4})*$/", 
    ":year_short"  => "/^([0-9]{2})*$/", 
    ":month"   => "/^([0-9]{2})*$/", 
    ":day"    => "/^([0-9]{2})*$/", 
    ":slug"    => "/^[a-zA-Z0-9 -]*$" 
); 

i Je pense dois remplacer :id-/^[0-9]*$/ et courir après un preg_match pour trouver si le modèle d'URL existe dans ma table de routes. Cependant, je ne sais pas si j'utilise les bons motifs regex ou si je suis complètement perdu.

Mon fichier est .htaccess (parce que je dois utiliser $ _GET ainsi)

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

J'utilise ce principe pour aller chercher l'URL et laisser de _GET variables $.

$route_orginal = trim($_SERVER["REQUEST_URI"]); 
if(strpos($route_orginal, "?")!=FALSE) { 
     list($route_orginal, $get_orginal) = explode("?", trim($_SERVER["REQUEST_URI"])); 
} 

if(substr($route_orginal,(strlen($route_orginal)-1),strlen($route_orginal)) == "/") { 
     $this->routes = substr($route_orginal,1,(strlen($route_orginal)-2)); 
} else { 
    $this->routes = substr($route_orginal,1,strlen($route_orginal)); 
} 
+0

Le manuel explique les modèles regex http://www.php.net/manual/fr/reference.pcre.pattern.syntax.php, et http://regular-expressions.info/ est une introduction utile. Aussi des outils comme http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world peuvent aider à les fabriquer. – mario

+0

Pouvez-vous s'il vous plaît ajouter plus de détails à votre question, Quelle est la contribution, votre code et une explication de ce qui ne fonctionne pas et ce que vous attendez exactement comme résultat. – stema

+0

Espérons que le code que j'ai ajouté explique un peu mieux ce que j'essaie d'accomplir – dansige

Répondre

1

Je ne suis pas sûr de ce que vous essayez d'accomplir.

Mais si vous voulez une URL comme www.mysite.com/tags/id-year-slug

où chaque balise est par un trait d'union seperated, vous pouvez faire comme ceci:

D'abord, vous besoin d'un fichier .htaccess dans votre racine pour créer de jolies URL.

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/tags/([A-Za-z-]+)$ index.php?tags=$1 [L,QSA] 

Ensuite, dans l'index, vous exploser les balises par le - delimiter:

$tags = explode('-',$_GET['tags']); 

Maintenant, vous avez un tableau de balises, que vous pouvez utiliser pour votre sql et l'URL est assez - haute cinq!

+0

+1 pour 'high five'! – daGrevis

+0

thx pour votre réponse, mais ce n'est pas ce que je cherchais exactement. J'ai mis à jour ma question et j'espère que cela éclaircira un peu ce que je cherche. – dansige

+0

J'ai trouvé la solution à cette question :) – dansige