从url获取变量,无法回显完整字符串

时间:2011-10-11 12:14:26

标签: php url variables mod-rewrite get

我有一个动态网址,如下所示;

news/categories/s/23-brook-launch-new-zealand

“23”是文章ID,“brook-launch-new-zealand”是文章标题。

当我这样做时:

echo $_GET['title'];

它只回传:“小溪”不是完整的字符串。

我正在使用mod_rewrite作为我的网址,代码如下:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-([a-zA-Z]+) /news/view-article.php?category=$1&id=$2&title=$3 [NC]

如何回显整个字符串?

4 个答案:

答案 0 :(得分:4)

您未与可能的-匹配:

... ([0-9]+)-([a-zA-Z\-]+) /news/...
                     ^^ You need to add these

所以完整的一行是:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-([a-zA-Z\-]+) /news/view-article.php?category=$1&id=$2&title=$3 [NC]

答案 1 :(得分:3)

你的重写规则不支持破折号试试这个:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-([^/]*) /news/view-article.php?category=$1&id=$2&title=$3 [NC]

答案 2 :(得分:1)

您用于匹配标题([a-zA-Z]+)的正则表达式仅匹配一组列表(a-z),并且不包含短划线(-)符号。也许正则表达式的那部分应该是:(([a-zA-Z]+-?)+)

然后你的重写规则是:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-(([a-zA-Z]+-?)+) /news/view-article.php?category=$1&id=$2&title=$4 [NC]

答案 3 :(得分:0)

我想你可能想要:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-([a-zA-Z0-9-]+) /news/view-article.php?category=$1&id=$2&title=$3 [NC]

对于您的版本,标题中只允许使用字母(a-zA-Z),因此正则表达式与短划线不匹配。上面应该与破折号相匹配,并且还允许标题中的数字(我怀疑你想要允许)。

您甚至可能只想这样做:

RewriteRule ^news/categories/([a-zA-Z]+)/([0-9]+)-(.+) /news/view-article.php?category=$1&id=$2&title=$3 [NC]

...并允许标题中的任何字符 - 您可以轻松使用,因为标题是网址的最后一部分。