我想
这些网址作为我网页上的类别:
http://example.com/en/articles //for list of all
http://example.com/en/articles/cars //for list of all cars articles
http://example.com/en/articles/nature //for list of all nature acrticles
http://example.com/en/articles/sport //for list of all sport articles
我正在使用i18n,这就是为什么我还有其他链接,如:
http://example.com/fr/articles //for list of all
http://example.com/fr/articles/cars //for list of all cars articles
http://example.com/fr/articles/nature //for list of all nature acrticles
http://example.com/fr/articles/sport //for list of all sport articles
这很容易,我称之为控制器articles.php anf里面我有功能汽车,自然,运动,一切运作良好。
但是,我想要有文章,无论它们是什么类别,都是这样的:
http://example.com/en/articles/article-about-cars http://example.com/en/articles/article-about-nature
因此,当查看完整文章时,该类别从网址中删除。
我正在使用i18n所以我的路线看起来像这样:
$route[’^en/articles/(.+)$’] = “articles/show_full_article/$1”;
$route[’^fr/articles/(.+)$’] = “articles/show_full_article/$1”;
但每次调用函数show_full_article时都会调用,因为它位于第2段。
所以,我不知何故需要重建正则表达式:
$ route ['^ en / articles /(.+)$'] =“articles / show_full_article / $ 1”;
排除功能汽车,自然和运动。我只有3个类别,因此手动输入并不是什么大不了的事。
如果您知道如何在routes.php中键入正则表达式以排除这三个类别,请让codeigniter再看不到它们作为文章名称,请告诉我。我会非常感激。
提前感谢您的任何建议。
答案 0 :(得分:0)
您可能想要使用negative lookahead (?!...)
。
在你的情况下:
$route['^en/articles/(?!(?:cars|nature|sport)$)(.+)$'] =
这可确保(.+)
不能成为其中一个词。它需要包含在(?:..)$
中,因此它也匹配字符串的结尾,否则断言也会阻止natureSMTHNG
和类似的较长项。