2010-05-14 3 views
1

J'utilise codeigniter et je veux rendre mon portail un peu plus convivial. J'ai un contrôleur (articles) qui gère chaque article sur mon portail. L'URL ressemble à ceci:Comment rediriger tous les appels uri vers un contrôleur, à l'exception de ceux qui sont statiques?

example.com/articles/category-sub-category/article-name

J'utilise le module mod rewrite pour cacher mon index.php, et le routage CodeIgniter pour cacher l'action du contrôleur qui gère tous les appels.

Je veux cacher des articles aussi, mais si je le cache, chaque appel va au contrôleur des articles, et ce n'est pas ce que je veux, parce que je veux que mon URL pour ressembler à ceci:

example.com/category-sub-category/article-name

Je l'ai essayé avec les règles de routage regexp dans le fichier routes.php mais je n'ai trouvé aucun moyen de le faire correctement.

+1

Peut-être que c'est juste moi, mais je n'ai aucune idée de ce que sont ces "articles" et pourquoi voulez-vous le cacher. Et pourquoi voulez-vous cacher quelque chose –

+0

Je veux le cacher parce que je veux une très bonne URL de référencement pour mon site. "articles" est le nom de mon contrôleur. Je l'appelle à travers uri, si je l'appelle comme dans mon premier exemple, ce n'est pas la meilleure option, parce que j'utilise le portail en plusieurs langues, en utilisant différentes catégories, et je pense que je vais avoir un meilleur classement dans toutes les langues. l'appel d'action d'article n'est pas là. (désolé pour ma mauvaise maîtrise de la langue) –

Répondre

0
RewriteCond %{REQUEST_URI} !^articles(?:/|$) 
RewriteCond %{REQUEST_URI} !^static1(?:/|$) 
RewriteCond %{REQUEST_URI} !^static2(?:/|$) 
... 
RewriteRule ^/(.*) /articles/$1 [QSA,NE] 
+0

C'est un bon moyen, mais pas un moyen codeigniter pour résoudre le problème. C'est à peu près la même chose, alors merci! –

3

En utilisant la fonction de routage de CI, vous auriez à définir un itinéraire pour chaque catégorie comme si ..

$route['category_one/:any'] = 'articles/category/category_one'; 
$route['category_two/:any'] = 'articles/category/category_two'; 
//.. and on and on until you've routed them all 

Il faudrait avoir une méthode category dans votre contrôleur Articles ou bien vous Il faudrait aussi créer une méthode pour chaque catégorie, ce qui aurait un caractère incontrôlable.

Au moins avec CodeIgniter, vous feriez mieux de garder la partie articles dans votre URL et de le faire comme ceci:

$route['articles/(:any)'] = 'articles/category/$1'; 

Vous auriez encore besoin de créer la méthode category dans votre contrôleur, bien que .

+0

Ok, c'est comme ça que je le fais en ce moment, mais j'ai besoin d'un moyen non statique pour le faire. Je suis assez sûr qu'il y a un autre moyen avec regex ou si (seul problème, que je ne sais pas comment).Je l'ai essayé avec la syntaxe suivante: $ route ['# [^ articles] /: any #'] = "$ 1/$ 2"; mais ça ne marchera pas –

+0

Pourquoi utilisez-vous $ route ['# [^ articles] /: any #'] = "$ 1/$ 2"; Vous n'avez pas besoin du regex start/stop, donc ce serait $ route ['articles/(: any)'] = "$ 1/$ 2"; Le() signifie que vous pouvez utiliser 1 $, mais vous correspondez seulement une chose alors 2 $ ne fonctionne pas. –

2

ok! problème résolu!

J'ai trouvé la solution à mon problème, sur le site suivant: http://bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-short/

$route['^(?!account|about|showcase|etc).*'] = "articles/read/$0";

Cette ligne renvoie toutes les demandes non-contrôleur à mon contrôleur articles, donc j'ai urls que je voulais :) ont

+0

Félicitations! Mais juste pour que vous sachiez, pas pour être un abruti ici, mais chaque demande est techniquement une demande de contrôleur. Vous êtes en train de réacheminer tout ce qui ne demande pas le compte, à propos, showcase, etc contrôleur au contrôleur d'articles. – bschaeffer

Questions connexes