我有一系列命令可以检查网址是否类似于
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';
但这会导致重定向循环,我无法解决原因。你能帮忙吗?
答案 0 :(得分:3)
从原始模式中删除结尾$
,因为这是字符串的结尾,所以如果有查询字符串则不匹配。