从漂亮的URL获取id作为intval

时间:2010-08-16 21:11:57

标签: php url-rewriting mod-rewrite

好吧,我设置了我的网址,将“news_item.php?id = 1”重写为“blog / 1 / Title-of-post”。

除了标题在开头有数字,例如“blog / 23/12-days-to-go”时,它无法找到正确的ID。

以下是我如何设置它,也许有人可以理解它。

重写规则

RewriteRule ^blog/([0-9]+)/([a-z-]+)/$ ./news_item.php?id=$1&t=$2
RewriteRule blog/([[0-9]+)/([a-z-]+) news_item.php?id=$1&t=$2

从网址获取ID

$id = intval($_GET['id']);

然后我只使用

`WHERE `id`=$id`

作为我的查询

使用链接

/blog/$id/$title/

除了在标题开头有一个数字之外,它的工作正常,但标题中的数字很好。谁能建议做什么?

2 个答案:

答案 0 :(得分:3)

ids的问题在于你的正则表达式。你不是在寻找数字。使用类似的东西:

RewriteRule ^ blog /([0-9] +)/([A-Za-z0-9 - ] +)/ $。/ news_item.php?id = $ 1& t = $ 2

“标题中的数字”有效,因为您只将字母字符拉到第一个数字。 (例如“abc123def”变为“abc”)

答案 1 :(得分:0)

首先,在您的示例中,您在第二个RewriteRule中获得了额外的[

如下所示的RewriteRule应该按照您的要求工作:

RewriteRule ^blog/([0-9]+)/([^/]*) ./news_item.php?id=$1&t=$2

以下URI /blog/12/24-days-to-go/extra-stuff应该在news_item.php中提供以下内容:

$_GET['id'] = 12;
$_GET['t'] = '24-days-to-go';

在第三个/之后剥离所有内容。

修改

像/ blog / 12 /这样的URI也可以正常工作,发送12作为id并给你一个空的$_GET['t']