在$ _GET中使用带有连字符的两个变量(单独)

时间:2014-11-18 08:40:21

标签: php

遇到麻烦,我无法想出这个。我只是粘贴我想要做的事情:

这是我的链接+处理链接的代码:

echo "<a href='/blog/$row[id]/$post_title'>";echo $row['post_title']; echo '</a>';

if (isset($_GET['post_id']) && isset($_GET['title'])) {
    $get_id = filter_input(INPUT_GET, 'post_id', FILTER_VALIDATE_INT);
        if (!$get_id) {
            echo 'Post not found.';
            exit();
        }

我有这个rewrite_rule

RewriteRule ^blog/(.+)/(.+)$ /index.php?post_id=$1&post_title=$2 [L]

所以,如果我去:

www.example.com/1/blog-post-title

它会显示带有该ID和标题的博客文章。该版本没有问题,工作正常。

但是我需要在链接中实现连字符而不是斜杠(在id之后),这就是我尝试过的:

echo "<a href='/blog/$row[id]-$post_title'>";echo $row['post_title']; echo '</a>';

但是当我去的时候:

www.example.com/1-blog-post-title

它不起作用,当我回显'$ _GET ['post_id']'时它试图寻找的变量;是“1-blog”。

我在这里做错了什么?显然,在我的链接中,我将id连接到帖子标题。但是我到底在做什么才能导致这个问题?

感谢您的帮助......

1 个答案:

答案 0 :(得分:1)

您需要修改RewriteRule以处理新模式。对于第一个匹配组,使用[^-]*匹配任何不是连字符的字符,后跟连字符,然后匹配第二组中的所有其他字符。

RewriteRule ^blog/([^-]*)-(.+)$ /index.php?post_id=$1&post_title=$2 [L]

请参阅Regex101上的替换。