我们运行博客,确实需要使用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
数字更改。
答案 0 :(得分:2)
(假设您使用apache作为网络服务器)
请查看此答案以获得一个非常相似的问题:https://stackoverflow.com/a/8030760/851273
这里的问题是.htaccess和mod_rewrite不知道如何将页面名称映射到art_id,所以有两种方法可以尝试这样做。
read.php
添加一些功能,以便它可以执行类似的查找,但不使用art_id
,而是使用art_title
或其他内容。基本上,您必须对数据库(或存储文章的任何位置)进行后端查找,并将标题用作密钥而不是ID。这有点乱,因为它可能在诸如非ascii或保留字符(例如?
)之类的标题中有奇怪的字符,所以当你从标题中提取标题时你需要创建一个标题编码器和解码器。数据库或使用标题查找数据库中的文章时。如果您有权访问服务器配置或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和保留字符。
您可以做的另一件事是将文章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。