为我们的博客创建搜索引擎友好的网址

时间:2012-07-13 19:09:54

标签: .htaccess rewrite sef

我们运行博客,确实需要使用htaccess整理网址,但我真的很难过。

示例:

在网站上工作,我需要生成搜索引擎友好的网址

所以我的网址目前为:

http://mywebsite.com/blog/read.php?art_id=11

此页面的标题是:

为什么澳大利亚人为汽车支付这么多钱?

我需要将其更改为相应的SEF网址。像这样:

http://mywebsite.com/blog/Why-do-Australians-pay-so-much-for-Cars-

问号是标题的一部分,我们可以删除这些问题。有什么建议吗?

也希望删除read.php部分。需要创建适用于整个博客的规则。

它们都遵循相同的模式,只有art_id数字更改。

1 个答案:

答案 0 :(得分:2)

(假设您使用apache作为网络服务器)

请查看此答案以获得一个非常相似的问题:https://stackoverflow.com/a/8030760/851273

这里的问题是.htaccess和mod_rewrite不知道如何将页面名称映射到art_id,所以有两种方法可以尝试这样做。

  1. 您可以向read.php添加一些功能,以便它可以执行类似的查找,但不使用art_id,而是使用art_title或其他内容。基本上,您必须对数据库(或存储文章的任何位置)进行后端查找,并将标题用作密钥而不是ID。这有点乱,因为它可能在诸如非ascii或保留字符(例如?)之类的标题中有奇怪的字符,所以当你从标题中提取标题时你需要创建一个标题编码器和解码器。数据库或使用标题查找数据库中的文章时。
  2. 如果您有权访问服务器配置或vhost配置,您可以设置RewriteMap using an outside program prg 类型)并创建一个执行标题到ID的查找。然后,您可以在.htaccess中创建重写规则,这些规则可以执行以下操作:

    RewriteRule ^blog/(.*)$ /blog/read.php?art_id=${title-to-id:$1} [L]
    

    从漂亮的网址中提取文章标题的位置,并通过名为 title-to-id 的重写地图提供文章标题以获取art_id。再次,您需要设置标题编码器/解码器,以便您的标题将处理非ascci和保留字符。

  3. 您可以做的另一件事是将文章ID粘贴在漂亮的网址中,使它们看起来像这样:http://mywebsite.com/blog/11-Why-do-Australians-pay-so-much-for-Cars。这仍然很容易看到链接是什么,它是SEO友好的,它绕过了标题到ID查找的需要。重写规则也同样简单:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # add whatever other special conditions you need here
    
    RewriteRule ^blog/([0-9]+)-(.*)$ /blog/read.php?art_id=$1 [L]
    

    就是这样。当然,您现在必须生成所有博客网址:http://(host)/blog/(art_id)-(art_title),并且您还必须从标题中删除特殊字符,但您不必担心编写附加代码以将标题翻译回ID。