【问题标题】:Getting variable from url, not being able to echo full string从 url 获取变量,无法回显完整的字符串
【发布时间】:2011-12-05 06:25:19
【问题描述】:

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

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

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

当我这样做时:

echo $_GET['title'];

它只回显:“brook”不是完整的字符串。

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

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

如何回显完整的字符串?

【问题讨论】:

    标签: php url variables mod-rewrite get


    【解决方案1】:

    我想你可能想要:

    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]
    

    ...并允许在标题中使用 any 字符 - 因为标题是 URL 的最后部分,所以您可以轻松摆脱这种情况。

    【讨论】:

      【解决方案2】:

      您用于匹配标题 ([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】:

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

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

        【讨论】:

          【解决方案4】:

          你没有匹配到可能的-s:

          ... ([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]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-31
            • 2011-03-09
            • 2016-01-22
            • 1970-01-01
            • 1970-01-01
            • 2012-03-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多