2013-05-02 2 views
1

참고 :이 코드는 문제의 간단한 설명을 위해 기본 사항을 유지하면서 위생적으로 처리되지 않습니다. 내 프로덕션 코드는 처리하기 전에 $ _GET을 위생 처리합니다. 내가 얻을 http://local.testzone.com/cat/title 또는 http://local.testzone.com/catHTACCESS가 500 내부 서버 오류를 일으켰습니다.

: 나는 내 테스트 URL로 이동하는 경우

$cat = $_GET['cat']; 
$title = $_GET['title']; 

if($cat && !$title) { 
    echo 1; 
} 

if($cat && $title) { 
    echo 2; 
} 

: 여기

RewriteEngine on 
RewriteCond %{REQUEST_URI} "/files/" 

RewriteRule (.*) $1 [L] 
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L] 
RewriteRule ^(.*) ?cat=$1 

내 PHP 파일입니다 : 여기

내 htaccess로 파일입니다 500 내부 서버 오류.

나는 htaccess로 파일의 마지막 줄에 언급 경우

#RewriteRule ^(.*) ?cat=$1 

http://local.testzone.com/cat이 날 제공 :

를 찾을 수 없음

을 요청 된 URL/고양이가이 서버에서 찾을 수 없습니다 .

http://local.testzone.com/cat/title 저를 제공합니다

2

는 고양이와 제목이 존재하는 경우 (2) 내 내 PHP는 에코를 따라해야 할 일이다.

내 질문은 - 어떻게 액세스 파일을 수정하여 고양이가있는 경우에만 1을 반향 출력합니까? 이 작업을 수행 할 수있는 유일한 방법은 수동으로 첫 번째 수준을 다음과 같이 설정하는 것입니다.

RewriteRule ^cat$ ?cat=cat 

이 방법은 작동하지만 응용 프로그램에서는 작동하지 않습니다. URL의 cat 값을 기반으로 데이터베이스를 쿼리해야합니다. cat 값은 동적으로 변경 될 수 있으며 htaccess 파일에 하드 코드 할 수 없습니다. 제목은 잘 작동하지만 고양이 부분을 어떻게 작동 시키나요?

희망에 따라 도움이 필요하다는 희망이 들었습니다.

+0

재 작성 규칙에 따라 무한 루프가 발생하므로 아파치가 10 번의 리디렉션 후 깨질 수 있습니다. 리뷰를 시도해보십시오. 특히 RewriteRule^(. *)? cat = $ 1 – nicolas

답변

0

일부 규칙은 정리할 수 있지만 규칙을 반복하여 루프를 유지하려면 조건을 추가해야합니다. 재 작성 enging은 URI가 변경되지 않거나 내부 재귀 제한에 도달 할 때까지 규칙을 통해 요청 URI를 계속 실행하므로 500 오류가 발생합니다.

RewriteEngine on 

RewriteRule ^/?files/ - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) ?cat=$1