2013-02-19 5 views
1

특정 디렉토리 아래에있는 합법적 인 디렉토리 이름을 PHP 파일로 리디렉션하고 싶습니다. 할 수있는 방법을 중첩 된 디렉토리를 .php로 리디렉션

RewriteEngine on 
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA] 
가 나는 이것이 내가 무엇을 찾고 생각하지만이 :

    나는 루트 htaccess로이 같은 일을 할 수 없다는 것 같다 this answer 발견
  • 디렉토리로만 제한하지만 중첩 된 디렉토리는 허용합니까?
  • 필터 디렉토리 만 : 파일을 처리하고 싶지 않습니다.

답변

0

나는이 질문을 삭제하려고했으나 누군가가 그것을 선호 했으므로 대신 대답하겠습니다.

<? 
dir is <?php 
echo $_SERVER["REQUEST_URI"]; 
?> 

내가 정규식에 만든 주요 수정 (:

RewriteEngine on 
RewriteRule ([^/]*)/$ processDir.php [B,QSA] 

다음 processDir.php가 GET을 사용하는 대신이 변수로 작업 할 수와 같은 htaccess로 사용 누군가가 나중에 고치게 될 것임)은 문자열 끝에 슬래시가 있어야한다고 주장하는 것입니다.

2

당신이 찾고있는 것이 RewriteCond이라고 생각합니다. 조건부로 다시 쓰기 규칙을 적용 할 수 있습니다.

RewriteCond %{REQUEST_FILENAME} -d 

당신은 다음과 같이 당신의 RewriteRule 위를 넣어 사용 :

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA] 

이이 질문의 방법 또는 당신의 대답 중 하나와 함께 작동합니다, 뭔가가 디렉토리 인 경우이 사람은 검사 주목해야 할 중요한 점은 -d 플래그가 규칙을 적용하기 전에 요청이 유효한 디렉토리인지 먼저 확인합니다. 이는 원하는 것처럼 보입니다.

내가 수집 한 것의 두 번째 부분은 중첩 된 디렉토리에 관한 것입니다. 당신의 정규 표현식은 특히 하나의 디렉토리 만 찾는다 (슬래시는 없다). 당신이 변경하려는 경우, 당신은 같은 것을 할 수 있습니다

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule /?some_dir/(.*) processDir.php?dir=$1 [B,QSA] 

some_dir 다음 유효한 디렉토리를 가지고 당신의 PHP 파일에이 공급됩니다.

마지막으로주의해야 할 점은이 모든 것을 루트 .htaccess 파일에 넣지 않아도된다는 것입니다. 재 작성하려는 디렉토리에 .htaccess 파일을 넣을 수 있습니다. 이 방법을 사용하는 것과 다른 방법을 사용하는 것의 차이는별로 없지만, 내가하는 일을 확신하지 못한다면 구문을 단순화 할 수 있다는 것을 알았습니다.

+0

굉장합니다, 감사합니다. 지금 +1하고,이 모든 것을 시험해 볼 기회를 얻었다면 (또는 그냥 받아 들여서) 다시 말하겠습니다. [B, QSA]는 무엇을합니까 (당신도 물론 연결할 수 있습니다)? –

+1

@ Yar B는 이스케이프 용이고 QSA는 쿼리 문자열 용입니다. , 나는 다만 그 (것)들을 당신의 포스트에서 혼자 leff. 자세한 내용은 http://httpd.apache.org/docs/current/rewrite/flags.html을 참조하십시오. –

관련 문제