2

我正在开发一个请求处理程序,以通过我的索引页面路由每个页面调用并具有 SEO 友好的 url。

domain.com/account/settings

这将很容易映射到正确的页面,但是当 uri 中有 ID 号或页码时,有些会更复杂。

所以我看到有些人会使用 preg_match 之类的东西并循环遍历一组模式 -> uri 来获得一个匹配,这对于分页和 id 发挥作用时非常有用,但根据我的经验,这似乎是在一系列说上运行 preg_match每个页面加载 20 个项目对性能不利。

请告诉我你对此的看法?

4

4 回答 4

2

这是您应该注意的事情:更好的选择是什么,而不是这个看起来很糟糕。如果您有一个看起来更好的替代方案,他们会使用它。如果没有,请使用正则表达式解决方案,直到您知道需要加快速度为止(我将省略我通常对过早优化的抱怨)。

我会亲自使用正则表达式处理程序。与此问题的其他一些替代方案相比,它们更灵活、更容易且更易于维护。但是YMMV...

于 2011-01-23T03:24:11.793 回答
2

一个不太复杂的正则表达式在一个短如 URI 的字符串上将花费很少的时间,甚至运行 20 次。如果您有 a) 对其进行分析或计时以证明这是一个性能问题,并且 b) 是一个很好的替代方案,那么您可以尝试更改它,否则我不会太担心它。毕竟,很多网站都使用 mod_rewrite 做类似的事情,在每次页面加载时根据一系列正则表达式检查页面 URI。

如果需要,您可以通过一些简单的 strstr() 检查将每个 URI 减少 20 倍以查看 URI 的基本格式(是否包含 id、页码等) . 优化您的正则表达式,例如尽可能使用“开始”^和“结束”$元字符,也会有所帮助。

于 2011-01-23T03:42:36.637 回答
0

我的网站上,我只有一些不同的重写规则,我认为这些规则效果很好:

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
于 2011-01-23T03:23:21.443 回答
0

所以我看到有些人会使用 preg_match 之类的东西并循环遍历一组模式 -> uri

我认为,这种方法是可以的。例如,Drupal 和 Django 框架就是这样做的。

另一种选择是使用 URL Rewrite Engine(例如,有关详细信息,请参阅此问题)。

于 2011-01-23T03:28:22.227 回答