PHP:解析不同风格的友好网址

时间:2010-01-13 20:11:41

标签: php mod-rewrite friendly-url seo

我正在编写自己的小框架,我将在那里实现友好的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这样的大型框架中提取算法非常困难。还有许多不同的不明显案例,如纠正处理URL UTF-8编码或使用magic_quotes_runtime等...

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

只需选择一种对用户来说简单的网址格式,并坚持使用。我个人更喜欢最后一种,mod_rewrite。你的问题暗示使用mod_rewrite有一些“错误”,但没有。{/ p>

您还可以使用$_SERVER["REQUEST_URI"]之类的内容来检测正在请求的网址,并执行301重定向到官方网址,如果有必要的话。