0

我们经营一个博客,确实需要使用 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数字发生了变化。

4

1 回答 1

2

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

看看这个答案非常相似的问题:https ://stackoverflow.com/a/8030760/851273

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

  1. 您可以向您添加一些功能,read.php以便它可以进行类似的查找,但不是art_id, 它使用art_title或其他东西。本质上,您必须对数据库(或存储文章的任何位置)进行后端查找,并使用标题而不是 ID 作为键。这有点混乱,因为标题中可能有奇怪的字符,例如非 ascii 或保留字符(?例如),因此在从数据库中提取标题或使用时,您需要创建标题编码器和解码器在您的数据库中查找文章的标题。
  2. 如果您有权访问服务器配置或虚拟主机配置,则可以使用外部程序prg类型)设置 RewriteMap 并创建一个为您执行 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。

于 2012-07-13T21:56:23.723 回答