我有一个动态网址,如下所示;
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]
如何回显整个字符串?
答案 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]
...并允许标题中的任何字符 - 您可以轻松使用,因为标题是网址的最后一部分。