【问题标题】:Create search engine friendly urls for our blog为我们的博客创建搜索引擎友好的网址
【发布时间】:2012-07-13 19:09:54
【问题描述】:

我们经营一个博客,确实需要使用 htaccess 整理 URL,但我真的很难过。

例子:

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

所以我目前的网址是:

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

此页面的标题是:

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

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

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

问号是标题的一部分,如果有问题,我们可以将其删除。请问有什么建议吗?

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

它们都遵循相同的模式,只是 art_id 号码发生了变化。

【问题讨论】:

    标签: .htaccess rewrite sef


    【解决方案1】:

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

    查看此答案以了解非常相似的问题:https://stackoverflow.com/a/8030760/851273

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

    1. 您可以向read.php 添加一些功能,以便它可以进行类似的查找,但它使用art_title 或其他东西代替art_id。本质上,您必须对数据库(或存储文章的任何位置)进行后端查找,并使用标题而不是 ID 作为键。这有点混乱,因为标题中可能包含奇怪的字符,例如非 ascii 或保留字符(例如 ?),因此在从数据库中提取标题时需要创建标题编码器和解码器或使用标题在数据库中查找文章时。
    2. 如果您有权访问服务器配置或虚拟主机配置,则可以设置 RewriteMap using an outside programprg 类型)并创建一个执行 title-to-ID 的 php 脚本为您查找。然后你可以在你的 .htaccess 中创建重写规则来做一些事情:

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

      您从漂亮的 URL 中提取文章标题,并通过名为 title-to-id 的重写映射提供它以获取 art_id。同样,您需要设置一个标题编码器/解码器,以便您的标题将处理非 ascci 和保留字符。

    您可以做的另一件事是在漂亮的 URL 中添加文章 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]
    

    就是这样。当然,您现在必须生成所有博客 URL 的格式为:http://(host)/blog/(art_id)-(art_title),并且您还必须从标题中删除特殊字符,但您不必担心编写额外的将标题转换回 ID 的代码。

    【讨论】:

    • 很好的答案谢谢你,不工作..主要是因为我不明白最后一段。但是会坚持下去,投票并选择最佳答案
    • @422 我只是说,当您生成博客链接时,要在其中包含 art_id,使其看起来像 http://mywebsite.com/blog/11-Why-do-Australians-pay-so-much-for-Cars
    • 是的,我还需要改变什么吗?因为我将您帖子底部的最后一个代码块添加到了我们的 htaccess(在 blog 中)文件夹中,并且没有任何变化。我在想..我错过了更相关的东西
    • @422 不这么认为(注意我编辑了它,其中一个应该是-d,复制粘贴搞砸了)。如果您还有其他规则,它可能与您将其放在 htaccess 文件中的位置有关,但该规则会将 URL http://mywebsite.com/blog/11-Why-do-Australians-pay-so-much-for-Cars 重写为 http://mywebsite.com/blog/read.php?art_id=11
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2012-02-24
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2011-12-24
    • 2023-04-08
    相关资源
    最近更新 更多