我正在处理一个请求处理程序,通过我的索引页面路由每个页面调用并拥有SEO友好的URL。
domain.com/account/settings
这很容易映射到正确的页面,但是当uri中出现ID号或页码时,有些更复杂。
所以我看到有些人会使用像preg_match这样的东西并循环遍历一系列模式 - > uri得到一个很好的匹配,当分页和id发挥作用时,但根据我的经验,似乎在每个页面加载的20个项目的数组上运行preg_match不利于性能。
请告诉我你对此的看法?
答案 0 :(得分:2)
这是你应该关注的事情:什么是更好的选择,而不是这个看起来很糟糕。如果你有一个似乎更好的替代品,他们会使用它。如果没有,请使用正则表达式解决方案,直到您知道您需要加快速度(我将忽略我对通常的过早优化的咆哮)。
我会亲自使用正则表达式处理程序。与此问题的其他替代方案相比,它们更灵活,更容易,更易于维护。但YMMV ......
答案 1 :(得分:2)
字符串上的一个非常复杂的正则表达式与URI一样短,只需要很少的时间,甚至可以运行20次。如果你有a)profiled或定时它来证明它是一个性能问题,而b)一个很好的替代使用,那么你可以尝试改变它,但否则我不会太担心它。毕竟,大量站点执行类似于mod_rewrite的操作,在每个页面加载时针对一系列正则表达式检查页面URI。
如果需要,你可以通过一些简单的strstr()检查将每个URI减少20倍到更少,以查看URI的基本格式(无论是否包含id,是否包含页码)等)。优化您的正则表达式,例如尽可能使用“开始”^
和“结束”$
元字符也会有所帮助。
答案 2 :(得分:0)
在my site我只有一些不同的重写规则,我觉得这很有效:
RewriteRule ^(main|home|daily_photo_mockup|games|sporktris(?:_web)?|nangooni|contact|source|admin|edit_photos?|edit_galleries|edit_gallery)(?:_(fr|sv))?$ index.pl?page=$1&lang=$2
RewriteRule ^(snow_flakes|photography)(\d+)?(?:_p(\d+))?(?:_(fr|sv))?$ index.pl?page=$1&subpage=$2&img=$3&lang=$4
答案 3 :(得分:0)
所以我看到有些人会用东西 像preg_match和循环通过 模式数组 - > URI
我认为,这种方法还可以。例如,Drupal和Django框架就是这样做的。
另一种选择是使用URL重写引擎(例如,请参阅this question)。