动态页面和干净的URL冲突

时间:2010-01-23 01:40:09

标签: php .htaccess mod-rewrite

我做了一些关于其他网站如何处理这个问题的事情并没有真正看到任何跳出来的东西。我正在开发一个项目,您可以在其中创建与其他每个页面链接的页面。这就是问题出现的地方。

我不确定如何连接到这些页面。我只是想到了两个想法,它们是:

  1. website.com/page/My-Page-Name
  2. website.com/My-Page-Name
  3. 要注意,我正在使用mod_rewrite将它们重定向到一个文件,该文件将页面名称作为参数,并从数据库中获取所有相关信息并显示它。这是思想#2的问题所在。

    创意#1 有效并且非常可靠,但我认为这有点难看,而且您没有看到很多网站链接到网站的其他网页,网址中填充了其他信息

    编辑有点清晰。所述页面的意图是静态的,因为它们将仅显示用户设置它们以显示的内容。它们永远不会除了任何类型的数据,在这种情况下,在这个例子中格式化的页面更合适。我将这些页面更多地与SO的常见问题或关于没有以这种方式格式化的URL的页面进行比较。

    创意#2 看起来更干净但在使用mod_rewrite和创建所述网页时遇到了一些问题。

    如果您将页面命名为相同,则网站的其他部分可以被模仿并导致冲突。例如,website.com/page1/指向已存在的page1,但如果有人想要创建名为page1的页面,则会出现冲突。

    因此实现这个想法我必须过滤并限制用户使用哪些页面名称,同时这可能会使该功能有点不直观,让他们摸不着头脑。除了编码它似乎有点难看,有一系列不可接受的页面名称,不得不检查它。

    最后一点处理mod_rewrite以重定向到这样的东西:RewriteRule ^([A-Za-z0-9-]+)$ getPage.php?p=$1变得有点难看,因为它有点贪婪,甚至在限制它除了之外。

    那么是否有人对任何其他可能解决这个问题的方法有所了解,或者如何实施上述两个中的一个可能会有所不同/更好?

    感谢。

2 个答案:

答案 0 :(得分:1)

我必须同意Idea#1(website.com/page/My-Page-Name)更好。它避免了别名,并使代码的其余部分更清晰(例如,重写规则只是查看/page/.*)。在使用这种技术的热门网站中有维基百科(http://en.wikipedia.org / wiki / C),Everything2(http://everything2.com / title / Cool + Archive)和Answers.com(http://www.answers.com / topic / 精致)。

编辑:如果您区分用户页面和内置页面,则可以使用构思#2。 URL的路径部分区分大小写,重写规则可以轻松检查。例如:

http://example.com/faq< - 该网站的内置常见问题页面。

http://example.com/Faq< - 用户的页面。

http://example.com/Frequently-asked-questions< - 另一个用户页面。

为了简单和用户友好,我仍然会使用#1,但这至少可以避免混淆。

答案 1 :(得分:0)

我会选择#1 ,这是一个相当普遍的惯例,可以避免潜在的问题。你说你没有看到任何网站这样做,显然你没有向上看

  (look up)
      ^
      |
http://stackoverflow.com/questions/2121720/dynamic-pages-and-clean-url-conflicts
                         ^^^^^^^^^

其他例子:

http://dsc.discovery.com/videos/mythbusters-raw-kari-goes-macgirlver.html
                         ^^^^^^

http://www.hulu.com/watch/115500/the-colbert-report-alicia-keys-and-stephen-perform
                    ^^^^^

另一种方法是填充内置页面,并将用户生成的内容放在url根目录中。例如Tcler的维基:

http://wiki.tcl.tk/_/recent        <-- special page padded with _
http://wiki.tcl.tk/coroutine       <-- user generated content