在.htaccess中重写URL的麻烦

时间:2012-01-20 23:31:09

标签: php url mod-rewrite

我的.htaccess文件如下所示:

RewriteEngine On
RewriteRule ^articles/(\d+)*$ ./articles.php?id=$1

因此,如果请求网址foo.com/articles/123,则控制权转移到articles.php?id=123

但是,如果请求的URL是:

foo.com/articles/123/

foo.com/articles/123/whatever

我收到“404 Not Found”回复。

我想在所有这些情况下致电articles.php?id=123。因此,如果网址以foo.com/articles/[digits]...开头,无论其他字符跟在数字后面,我都希望执行articles.php?id=[digits]。 (URL的其余部分将被丢弃。)

如何更改正则表达式以实现此目的?

2 个答案:

答案 0 :(得分:2)

您需要允许尾随/

RewriteRule ^articles/(\d+)/?$

\d+只会匹配小数。并且$将不允许比赛结束。

如果您还需要尾随标识符,那么您也需要允许它们。然后最好使匹配不明确:

RewriteRule ^articles/(.+)$

此处.+几乎可以匹配任何内容。

但是如果你想将数字id分开,那么将这两个选项结合起来:

RewriteRule ^articles/(\d+)(/.*)?$   ./articles.php?id=$1

答案 1 :(得分:2)

只是不要寻找结束:

RewriteRule ^articles/(\d+) ./articles.php?id=$1