为什么我的页面会导致重定向循环?

时间:2012-06-10 11:59:46

标签: php regex

我有一系列命令可以检查网址是否类似于

http://localhost/questions/32/new-question-from-peter

如果最后一部分丢失,我会重定向到此。我最后允许片段。
但是,我想为它添加一个可能性

http://localhost/questions/32/new-question-from-peter?page= <int>

这是我的代码

if($question){
    $url = $_SERVER['REQUEST_URI'];
    $dashed = $question->dashed_title;
    $pattern = '/^\/questions\/[0-9]+\/'.$dashed.'(\/#[0-9]+)?$/i';

    if (!preg_match($pattern, $url)){
    // redirect_301 is a function that I wrote
        redirect_301('http://'.$_SERVER['HTTP_HOST'].'/questions/'.$question->id.'/'.$dashed);
    }
}

目前它工作正常,并将始终重定向到正确的路径。但它不会让我追加

?page=<int>. 

所以我认为模式应该是

$pattern = '/^\/questions\/[0-9]+\/'.$dashed.'((\/#[0-9]+)|(?[\w\d&=]+))?$/i';

但这会导致重定向循环,我无法解决原因。你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

从原始模式中删除结尾$,因为这是字符串的结尾,所以如果有查询字符串则不匹配。