使用 .htaccess 将变量重写到目录

Posted

技术标签:

【中文标题】使用 .htaccess 将变量重写到目录【英文标题】:Using .htaccess to rewrite variable to directory 【发布时间】:2014-06-10 22:54:28 【问题描述】:

我从零开始创建了一个博客来测试我的 php/html/CSS/Jquery 技能等。一切顺利,现在我想设置 htaccess 文件,以便当用户阅读博客文章时,URL 会读取

http://www.mysite.com/blog/post-title-here

而不是

http://www.mysite.com/blog.php?id=30

这可能吗?

博客设置是将帖子保存在数据库中。文章页面是根据博客文章的 ID 生成的。 PHP 通过 ID 检索整个帖子并将其全部推送到一个对象中。所以博客标题是 $blogpost->title;

【问题讨论】:

您好,可以使用 htaccess 文件重新生成您的 URL。您只需为要生成的新 URL 编写规则 我认为这在 htaccess 中是不可能的,因为它不知道你的 ID/title 关系是什么。除非您丢失了所有博客文章 ["id"]=>["title"],否则我不确定 htaccess 将如何重写 URL? htaccess 不可能做到这一点,它可以让你最接近的是http://www.mysite.com/blog/30。你需要使用 php 来做你想做的事。 【参考方案1】:

如果您的 PHP 脚本根据其 ID 检索帖子,那么您必须将其包含在 URL 中。你可以试试这个:

http://www.mysite.com/blog/30/post-title-here

然后修改您的 .htaccess 文件以读取 ID 参数,如下所示:

RewriteEngine on
RewriteRule ^blog/([0-9]+)/([a-zA-Z-_])$ blog.php?id=$1 [L]

或者您可以在您的帖子表中添加新字段,称为permalink 或其他名称,并使用它来检索帖子,而不是 ID。像这样:

SELECT * FROM posts WHERE permalink LIKE 'post-title-here'

【讨论】:

这对 SEO 是否值得做,还是 SEO 不关心数字被用作目录?我知道 SEO 讨厌变量,但目录呢?也谢谢,这非常有用:) @BITmixit 我一直认为规范 url www.site.com/like-this-one 更易于阅读,因为人们实际上可以通过简单地阅读链接来了解链接背后的内容。从 SEO 的角度来看,我真的不能说什么更好,但是为了更好地优化它们并获得更高的排名,在网站和页面中还有许多其他(更)更重要的事情要做。在这里查看What makes a “friendly URL”?【参考方案2】:

您必须首先确保在您的网站上启用了 mod modrewrite。

其次,帖子的 id 必须在 url 中才能加载帖子。

例如,如果你想重写

http://www.mysite.com/blog/30/post-title-here

http://www.mysite.com/blog.php?id=30

您可以将以下代码放入您的 .htaccess 中:

RewriteEngine on
RewriteRule ^blog/(\d+)/.*$ blog.php?id=$1 [L]

【讨论】:

非常感谢这个位。这与我正在寻找的东西很接近。是否有任何 PHP 明智的方法可以更改 URL,或者是否必须在其中包含帖子 ID。我问的唯一原因是因为我的 wordpress 网站已设置,因此每个博客文章都是 wordpressisshit.com/hey-its-a-post 我这样做的主要原因是为了 SEO,所以 /blog/20/itsapost 与 /blog/ 一样可以接受它的邮政

以上是关于使用 .htaccess 将变量重写到目录的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将子域重写到目录并将子域保留在 url

Apache Nginx URL 地址 重写

htaccess mod 用斜杠将 $_GET 重写为变量

重写 .htaccess 到子目录

htaccess使用https,非www和目录尾随将两个域重写为一个域

.htaccess 重写仍然可以使用 get 变量的漂亮 url