开发者

Regex to exclude categories from url in Codeigniter. How?

开发者 https://www.devze.com 2023-04-12 22:54 出处:网络
I would like to have these urls as categories on my page: http://example.com/en/articles//for list of all

I would like to have

these urls as categories on my page:

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

I am usi开发者_如何学编程ng i18n that is why I have also another links like:

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

This is easy, I call a controller articles.php anf inside it I have functions cars, nature, sport and everything works well.

However, I want to have articles, no matter what category they are, like this:

http://example.com/en/articles/article-about-cars http://example.com/en/articles/article-about-nature

So, the category fell out from url when full article is view.

I am using i18n so my routes for this look like this:

$route[’^en/articles/(.+)$’] = “articles/show_full_article/$1”;
$route[’^fr/articles/(.+)$’] = “articles/show_full_article/$1”;

But this call everytime the function show_full_article, because it is in the 2nd segment.

So, I somehow need to rebuild the regex in:

$route[’^en/articles/(.+)$’] = “articles/show_full_article/$1”;

to exclude functions cars, nature and sport. I have only 3 categories so typing it manually is no big deal.

Please, if you know how to type the regex in routes.php to exclude these three categories , so codeigniter do not see them anymore as article names, let me know. I will appreciate it very much.

Thank you in advance for any advice.


You probably want to use a negative lookahead (?!...) for that.
In your case:

 $route['^en/articles/(?!(?:cars|nature|sport)$)(.+)$'] =

This ensures that the (.+) can not be one of those words. It needs to be wrapped in (?:..)$ so it also matches the end of the string, as otherwise the assertion would also block natureSMTHNG and similar longer terms.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号