2012-06-10 2 views
0

가 나는 URL을내 페이지가 리디렉션 루프를 발생시키는 이유는 무엇입니까?

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

같은 것을보고 마지막 부분이없는 경우 I이로 리디렉션 여부를 확인 일련의 명령을 가지고있다. 나는 끝에 조각을 허용합니다. 그것은 여기

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); 
    } 
} 

는 순간입니다 잘 작동하고 항상 올바른 경로로 리디렉션 할 예정위한
그러나, 나는이 사용되고 있습니다 추가하고 싶습니다. 하지만 그래서 내가 패턴이

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

해야하지만이 리디렉션 순환의 결과로하고 내가 왜 해결하지 못할 것으로 생각 날

?page=<int>. 

를 추가하지 않습니다. 도울 수 있니?

답변

3

원래 패턴에서 끝 문자 인 $을 제거합니다.이 패턴은 문자열의 끝이므로 쿼리 문자열이 있으면 일치하지 않습니다.

+0

주셔서 감사합니다.하지만 그 제목 뒤에 일반 문자가 허용됩니다. 어떻게 그럴 수 있습니까? 가 허용됩니다 – yehuda

+0

원래 정규 표현식에서'$'를'(\.. *)? $'로 대체하십시오 (이스케이프 된 "?" – d11wtq

+0

BTW에 유의하십시오.) URL의 해시 구성 요소는 웹 서버에 표시되지 않습니다. .. 클라이언트 쪽 구성 요소입니다. – d11wtq

관련 문제