2011-03-31 2 views
1

RewriteRule 플래그에 문제가 있습니다. 내 응용 프로그램을 처리하는 "기본"RewriteRule이 있지만 다르게 처리해야하는 URL도 있습니다 (사용자 지정 경로로 볼 수 있음).RewriteRule 규칙 순서 및 플래그

많은 플래그를 시도했지만 원하는 결과를 얻지 못했습니다. 코드에서 원하는 내용을 확인하십시오.

# First check if this pattern is found, and if it's not, continue to the next one and disregard this one 
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L] 

RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L] 

미리 감사드립니다.

답변

0

첫 번째 규칙에서 연결을 위해 C 플래그를 사용합니다. 즉, 첫 번째 규칙과 일치하지 않는 경우 두 번째 규칙은 무시됩니다. 귀하의 의견은 C 플래그없이 일어날 일을 설명합니다. 첫 번째 규칙이 일치하는 경우 두 번째 규칙을 적용하지 않으려는 경우 대신 L 플래그가 필요할 수도 있습니다.

편집 : 당신이 당신의 첫 번째 규칙에 L로 C 플래그를 변경 한 이제

또 다른 문제가 있습니다. 재 작성된 경로가 RewriteRule 지시어에 의해 어떤 방식 으로든 다시 처리되지 않도록해야합니다.

RewriteCond %{REQUEST_URI} !index.php 
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L] 

RewriteCond %{REQUEST_URI} !index.php 
RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L] 

불행하게도, 내가 같은를 만들 수있는 방법을 알고하지 않습니다 목표를 달성하기

이 경우

에게 한 가지 방법은 페이지 자체가 이미의 index.php에 다시 작성되지 않도록하는 것입니다 RewriteCond는 각 규칙 앞에 반복하지 않고 모든 규칙에 적용됩니다.

편집 : 지금은 그것을 생각

가, 그래, 아마도 약간 더 나은 솔루션이있다.

RewriteRule ^index.php - [PT,NC,L] 

이제 일치 index.php를 시작으로 아무것도, 아무것도 변경되지 않습니다, 더 이상의 RewriteRules는 다음되지 않습니다 : 대신한다 RewriteCond 지시어를 사용하여, 시작합니다.

+0

사실, C 플래그를 제거하는 것을 잊었습니다. 그것을 제거하거나 L 플래그로 바꾸면 페이지 매개 변수가 항상 'index.php'가됩니다. 아주 이상한 – Jesse

+0

@Jesse 내 편집을 참조하십시오. – Andrew

+0

감사합니다. 작동하는 것처럼 보이지만 더 나은 해결책이 있어야한다고 생각하지 않습니까? – Jesse