2011-01-25 4 views
4

내 웹 사이트의 특정 디렉토리에 대한 특정 요구 사항이 있습니다. 나는htaccess 하위 디렉토리 이름을 쿼리 문자열 매개 변수로 다시 작성

/thisDirectory/subDirectory 

내가 성공적으로 할 것입니다 htaccess로 파일을 만들 때 문제가 있습니다

/thisDirectory?param=subDirectory 

로를 통해 올 변경해야합니다. 나는 여러 가지 일을 시도했습니다,하지만 난이 가장 가까운 생각 :

RewriteEngine On 
RewriteRule ^/directory/(.*)\??(.*)$ /directory/?page=$1&$2 

나는 500 서버 오류, 무한 리디렉션 루프, 등 등 어떤 도움을 모든 종류의에 직면했습니다이 많이 주시면 감사하겠습니다, 감사 !

답변

3

당신이 당을 제거해야합니다 나는 전혀 당 디렉토리 맥락에서이 작업을 수행하는 것이 놀랍군요 패턴에서 -directory 경로 접두사 :

htaccess로의 재 작성 엔진을 사용하여 (항상 특정 디렉토리에 대해 동일 함) 당 디렉토리 접두사를 파일이 RewriteRule 패턴 매칭에 대해 자동으로 제거이며, 자동으로 이 추가 된 후 상대방 (시작 위트가 아님)이 설치된 후이 h 슬래시 또는 프로토콜 이름) 대체는 룰 세트의 끝을 만나게됩니다. 될 문서 루트 디렉토리의 경우

/을 선도하고 규칙은 다음과 같이 보일 것이다 :

RewriteRule ^directory/(.*)\??(.*)$ /directory/?page=$1&$2 

하지만 그 외에

, RewriteRule 만 URI 경로가 아닌 쿼리를 확인할 수 있습니다; 그렇게하려면 RewriteCond이 필요합니다. 그래서이 시도 :

RewriteRule ^directory/(.+)$ /directory/?page=$1 [QSA] 

여기에 대신 .*.+ 무한 재귀를 피해야한다 .* 모든 것을 일치로, 심지어 빈 문자열 (즉 /directory/ 후 빈 경로 세그먼트의 경우가 될 것이다). QSA flag은 요청 된 URI 쿼리를 새 URI에 자동으로 추가합니다.

1

많은 좌절감을 느낀 후에 ... 문제가 동일한 "디렉토리"로 다시 작성하려고했는데 ([L]이 (가) 루핑하지 않을 것이라고 생각했지만 ...)). ... 나는 그것이로 재 작성 된 디렉토리의 이름을 변경하고 그것을 작동하는 것 같다

RewriteBase /my/base/rewrite/ 
RewriteRule ^directory/(.*)$ newDirectory/?page=$1 [L] 
관련 문제