【问题标题】:PHP: Parse different styles of friendly urlsPHP:解析不同风格的友好网址
【发布时间】:2011-01-04 19:36:26
【问题描述】:

我正在编写自己的小框架,并且我将在那里实现友好的 URL。 mod_rewrite 很棒。但我希望能够同时处理多种类型的友好 URL:

/index.php?ac=user&an=showprofile (fallback variant, the worst)
/index.php/user/showprofile (supposedly, can be disabled by security settings)
index.php?user/showprofile (optional, not needed)
/user/showprofile (ideal, but requires mod_rewrite or dirty ErrorDocument tricks)

我希望同时支持所有变体,以便使用任何方案生成的旧链接将永远有效。我应该为此编写自己的解析函数,还是我错过了一些可以做到的库/脚本?从 Symfony 或 Zend 等大型框架中提取算法非常困难。还有许多不同的不明显的情况,例如正确处理 UTF-8 编码的 URL 或使用 magic_quotes_runtime 等...

【问题讨论】:

  • 为什么要保留旧系统?如果有人用旧系统为 URL 添加了书签,并且它重写到新系统,即使 URL 更改为新系统,他们仍然会到达正确的站点。
  • 是的,没错。您是什么意思“保留旧系统”?我需要所有类型的链接同时工作。
  • 如果您希望所有这些链接到同一个地方,只需将所有包含“showprofile”的请求重写为脚本,然后输出用户名的配置文件。
  • 第一个 URL 是简单的$_GET 变量。第二个和第三个你可以简单地拆分?/ 字符来获取参数。第四个你可以从框架中剥离出来;只是.htaccess。我在这里想说的是,您可以在 5 行或更少的代码中完成这些工作。周围没有任何库,因为它实现起来很简单。

标签: php mod-rewrite friendly-url seo


【解决方案1】:

如果您既可以通过编程方式区分所有不同类型的 URL 并将它们规范化为一种基本形式,您只需编写一个简单的标记器函数来规范化不同的类型,然后您可以使用规范化的类型来获取实际目标。我已经这样做了,但不是没有 mod_rewrite。很确定它可以在没有它的情况下完成。

我通常有一个索引文件来解析任何 url,然后执行一堆请求处理和路由来获取输出,而没有任何 url 直接映射到任何文件。只需将所有内容 mod_rewrite 到该索引文件并解析 $_SERVER['REQUEST_URI']

【讨论】:

    【解决方案2】:

    第一个到第三个应该传递给 PHP 进行处理($_GET$_SERVER["REQUEST_URI"]$_SERVER["QUERY_STRING"])。

    第四个可以通过 mod_rewrite 使用 RewriteCond !-f 和适当的 RewriteRule 来完成。

    【讨论】:

    • 我知道怎么做。如果某处已经存在用于执行此操作的库,我只是不想重新发明轮子。
    【解决方案3】:

    您应该避免允许所有不同类型的 URL。如果您发布的所有这些 URL 都显示相同的内容,那么 SE 会将其视为重复内容,您最终将“分裂”您的排名。换句话说,如果一切都集中在一个 URL 上,这四个页面中的每一个都将排名四分之一……如果这有意义的话。

    只需选择一种对用户来说简单的 URL 格式,并坚持下去。 我个人更喜欢最后一种,mod_rewrite。您的问题暗示使用 mod_rewrite 存在一些“错误”,但没有。

    您还可以使用 $_SERVER["REQUEST_URI"] 之类的东西来检测正在请求的 URL,并在必要时执行 301 重定向到官方 URL。

    【讨论】:

    • 当然,一个网站会坚持一种类型的链接。为防止内容拆分,您可以在一种链接类型上发送 HTTP 301 代码。这是一种同时处理两个链接的后备机制。以 VB4 实现为例:vbulletin.com/forum/…
    猜你喜欢
    • 2011-04-06
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2012-10-15
    • 2011-02-15
    • 2011-04-05
    相关资源
    最近更新 更多