漂亮的URL& SEO友好的URL?

时间:2011-08-24 03:11:16

标签: apache mod-rewrite seo

我目前正在使用Apache 2.2

我可以做简单的事情,比如

RewriteRule ^/news$ /page/news.php [L]
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L]

但如果我想发送2个这样的参数怎么办

  

http://www.example.com/link/param1/param1_value/param2/param2_value

最后,我还想知道实现SEO友好的URL,如stackoverflow

虽然我可以访问包含

这样的网址的网页
  

http://www.example.com/doc_no/

只需使用

装饰该网址即可
  

http://www.example.com/doc_no/this-is-the-article

给我一​​些关于示例片段的建议。

2 个答案:

答案 0 :(得分:1)

我知道PHP symfony框架允许你这样做。

它是如何工作的: 在apache配置中,使用mod_rewrite将所有传入的resquest重定向到单个入口点(在symfony中,这称为“前端控制器”)

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

在这个前端控制器中,您将创建一个“请求”对象,该对象包含URL提供的所有信息。

例如,您可以说“/”之后的第一件事是要调用的PHP文件的名称,其他所有内容都是参数和值,以便: http://example.com/file/id/2将调用id = 2

的file.php

要做到这一点,只需使用一些reg exp并仔细设计“请求”类。对于上面的示例,“Request”类应提供getRequestedAction()和getParameter(字符串参数)方法。完全填充“Request”对象以调用正确的文件/操作/方法时,将使用getRequestedAction()方法。

如果您选择使用URL上的reg exp和_GET数组的解析来填充请求对象的参数数组,您可能会到达以下位置: http://example.com/file/id/2http://example.com/file?id=2相同 (两者都可以工作)

您可以选择忽略扩展程序(http://example.com/file.html与http://example.com/file相同),或不。

最后,对于某些网址,您可以选择忽略最后一个'/'之后的所有内容。因此:http://example.com/question/3/where-is-khadafihttp://example.com/question/3/is-linux-better-than-windows

相同

在不同的file.php中,只需使用$ request-&gt; getParameter('id')来获取“id”参数的值,而不是使用_GET或_POST数组。

重点是

  1. 将所有传入流量重定向到单个“前端控制器”
  2. 在该文件中,创建一个“请求”对象,其中包含运行站点所需的所有信息
  3. 根据“请求”对象
  4. 中包含的信息调用正确的操作(php文件)
  5. 在操作中,使用此请求对象获取URL中包含的参数
  6. 希望这有帮助

答案 1 :(得分:0)

请注意Google have stated他们更喜欢news.php?id=$1而不是news/$1,因为他们更容易检测变量。这在增加变量数量时更为相关,因为只看第一个例子有点令人困惑:

http://www.example.com/link/param1/param1_value/param2/param2_value

如果一个参数是通用的,则可以将两者结合起来,如类别:

http://www.example.com/param1/?id=param2_value

如果需要多个参数并且不是临时搜索,那么应该重新评估设计。