2

如果我有一个动态页面,它接受一个像 example.com/posts.php?id=2 这样的 id 参数,我如何在 htaccess 中创建一个 RewriteRule,以便 url 显示帖子的标题而不是它的 id,因此,例如posts.php?id=2 显示标题为“PHP 很酷”的帖子,我希望将url 重写为example.com/2/php-is-cool 或类似的东西?如果标题值存储在 MySQL 数据库中,这可能吗?

附加信息:

这就是我的 htaccess 的样子:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$
RewriteRule (.*) http://www.mydomain.com/$1 [R=301,L]

ErrorDocument 404 /index.php
ErrorDocument 403 /index.php
php_value post_max_size 20M

基本上,我有一个 MySQL 数据库,它将博客文章存储在一个名为 posts 的表中。posts 表有一个 id 属性(即自增主键)、一个 title 属性和一个 content 属性。当我访问 mydomain.com/posts.php?id=X 时,它会在网页上的数据库中显示我的帖子,其 id 为“X”。我只是希望能够重新编写 URL,以便它显示页面的标题。我这样做主要是为了 SEO,而不是美学。这可能使用 htaccess,还是我必须以不同的方式处理?

4

2 回答 2

2

重写规则适用于在后端 (apache) 上处理 URL 的方式。使用 mod_rewrite 重写这些 URL 不会影响用户在浏览器的 URL 栏中看到的内容,除非您将用户重定向到新的 URL(例如使用 302 重定向),这会导致浏览器重新加载页面。

您可以使用 HTML5 pushstate 功能实现您所要求的功能(如果该浏览器不支持 pushstate,则回退到 URL 哈希)。

查看此 URL 以了解更多详细信息:

http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate

此外,您可以使用 BackboneJS 及其路由器功能在浏览器中处理您的页面和 URL 处理逻辑。

http://backbonejs.org/#Router

这是一种非常特定于应用程序的解决方案,如果不知道您的确切配置、应用程序逻辑等,这个答案就无法详细说明。

于 2012-08-18T21:21:09.233 回答
0

如果您只为 SEO 做这件事,最简单的方法是将所有URL 传递给一个脚本,该脚本分析请求并从数据库中传递内容。像

RewriteRule (.*) index.php?url=$1

当然,您必须从规则中排除 index.php。

于 2012-08-18T21:31:47.107 回答