繁体   English   中英

漂亮的URL和SEO友好的URL?

[英]Pretty URL & SEO-friendly URL?

我目前正在使用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

虽然我可以访问带有URL的页面,例如

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

只需使用

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

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

我知道PHP symfony框架允许您执行此操作。

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

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

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

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

为此,只需使用一些reg exp并仔细设计“请求”类即可。 对于上面的示例,“ Request”类应同时提供getRequestedAction()和getParameter(string parameter)方法。 当完全填充“请求”对象时,将使用getRequestedAction()方法以调用正确的文件/操作/方法。

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

您可以选择是否忽略扩展名(http://example.com/file.html与http://example.com/file相同)。

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

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

重点是

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

希望这可以帮助

注意Google声明他们更喜欢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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM