2016-06-30 3 views
-1

htaccess 파일을 처리하는 데 문제가 있습니다. 나는이 같은 URI를 가지고 :htaccess 파일에서 부분 문자열 가져 오기

http://www.exemple.com/?fileName=fileName&otherString=otherString 

그리고이 같은 명령을 실행하고 싶습니다 :

<If "file('fileName') !~ /otherString/"> 
    # do something 
</If> 

이 URI에서 파일 이름과 otherString에 접근 가능을?

%{QUERY_STRING} 부분 문자열을 정규식으로 가져올 수 있습니까? 또는 다른?

미리 감사드립니다.

편집 :

나는 (지금의 경우) URI를 다시하고 싶지 않아요. URI는 텍스트 파일의 이름 ("fileName")과이 파일의 정보 ("otherString")를 포함합니다. 이 파일에 액세스하여 그 정보가 그 파일에 들어 있는지 확인하려고합니다. 그렇다면, 내가 원하는 것을 해보십시오. 나는 URI에서 원하는 두 부분을 분리

/\?file\=(.*)\&/ 
/\&otherString\=(.*)$/ 

:

나는이 두 정규식이있다. 하지만 URI의 일부를 문자열로 가져 와서 조작하는 방법 (사용 가능한 경우)을 사용하는 방법을 모르겠습니다.

+0

질문을 편집하고 수행하려는 재 작성의 예를 추가해주십시오. –

답변

1

아파치가 이것을위한 최상의 도구가 아닙니다.

%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/과 같은 정규 표현식으로 원하는 매개 변수의 값을 쿼리 문자열에서 추출 할 수 있습니다. 값인 파일 이름은 역 참조 변수 $1otherString, $2에 대해 검색 할 수 있습니다.

하지만 regexp에서 역 참조 변수를 다시 사용할 수 없습니다.

그래서 정확히 일치 : 문자열이 파일에 어디에서나 발견 할 수있는 경우

<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . $1) == $2"> 

(비 일치 !=== 변경), 최고의 내가 봤는데 찾을 수있다 :

<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . $1) -strmatch '*$2*'"> 

을 (그 부정에 대한 file( 전에 ! 추가)

오류 로그에 쓸데없는 소음을 피하기 위해 && -s %{DOCUMENT_ROOT} . '/' . $1과 같은 테스트를 추가하는 것이 좋습니다.

+0

감사합니다. 좋은 조건을 구축하는 데 도움이되었습니다. –

관련 문제