2016-08-04 5 views
1

하위 디렉토리에 htaccess 파일이 있으며 url을 다시 작성하려고 할 때마다 htaccess가있는 하위 디렉토리가 아니라 document_root로 리디렉션됩니다. 자, 정상적인 상황에서, 나는 하위 디렉토리에 대한 경로를 path/to/subdirectory으로 다시 작성 하겠지만 정확한 경로가 무엇인지는 알 수 없습니다. Apache 환경 변수 또는 다른 경로를 통해 경로를 작성하는 방법이 있습니까?.htaccess 및 알 수없는 상위 디렉토리의 하위 디렉토리에서 다시 쓰기

편집 : 여기까지는 .htaccess 파일입니다.

RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    #RewriteRule (.*-file) a/b/c/$1.file 
    RewriteRule (.*-file) $1.file 

그래서, 요청이 단어 file을 포함하는 경우, 내가 이전에 워드 파일 전체 요청을 일치가 리디렉션 할에 노력하고있어. 이는 요청이

example.com/a/b/c/file[any characters here].file 

일 때 요청이 올바른 파일로 리디렉션되도록하기위한 것입니다. 다시 말하면 문제는 하위 디렉토리로 리디렉션하려고한다는 것입니다. 그래서 Rewrite $ 1을 말하면, REQUEST_FILENAME에서 일치하는 것이 아닌 전체 요청을 포함하기를 원합니다. 그리고 내가 그것을하기 위해 필요로하는 이유는 단지 a/b/c/$1.file을 넣을 수 없기 때문입니다. 왜냐하면 나는 절대적인 확실성을 알지 못하기 때문에 a/b/c 부분입니다.

편집 2 : 예 :

example.com/a/b/c/fileacs.file 

하고 리디렉션 할 : 나는 모르는 경우

example.com/a/b/c/file.file 

그래서, 예를 들어 내가 같은 요청을 보낼 것이다 /기원전/. 이 리디렉션의 실제 사용에 대한 실제 정규 표현식 및 규칙 집합이 있으므로이 예제의 우스운 성격에 신경 쓰지 마십시오.

그러나 현재는 리디렉션 것 : 존재하지 않으며 않았다하더라도 내가 거기에 리디렉션하고 싶지 않은

example.com/file.file 

. 다시 쓰기 컨텍스트에 대해 읽었지만 그에 대한 내용이나 이에 대한 원인을 찾을 수 없습니다. 미리 감사드립니다.

+0

.htaccess를 표시 할 수 있습니까? – anubhava

+0

@anubhava 나는 집에 있어야 할 것이다. 그러나 내가 지금까지 가지고있는 것을 보여주기 위해 내 메인 포스트를 편집 할 것이다. –

+0

@anubhava 나는 게시물을 편집하여 선명도와 컨텍스트를 추가했습니다. –

답변

2

당신은 fileacs.file 전에 경로를 포착하고 RewriteRule에서 바흐 - 참고로 그 사용이 규칙을 사용할 수 있습니다

RewriteEngine On 

RewriteCond ^(.*)/file[^.]+\.file$ [NC] 
RewriteRule^%1/file.file [L,R=302] 
+1

당신은 내 솔루션에 가깝게 대답하지만, 내가 생략하려고했던 요청의 일부와도 일치하지만, 대단히 감사합니다! –

+0

나는 내 정규식으로는 알 수없는 경로 만 캡처하려고합니다. –

0

이 솔루션은 % {REQUEST_URI} (감사 anubhava의 A한다 RewriteCond를 사용하는 것입니다!) 검사는 % {REQUEST_FILENAME}을 제외하고 전체 요청을 캡쳐하지 않고 lookahead를 사용하여 일치시킵니다. % 1 뒤에 원하는 파일 이름을 붙여서 작성하십시오. 다음을 참조하십시오 :

RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_URI} (.*)-file(?!\.file) [NC] 
    RewriteRule^%1.file [L,R=301] 

% 1은 이제 htaccess로가 저장되는 디렉토리, 플러스 파일 이름에 접두어의 경로를 보유하고있다. 이것은 요청의 나머지 부분과 일치하지 않지만 리다이렉트하려는 파일을 실제로 요청하지 않았는지 확인하기 위해 미리보기를 반복합니다 (루프가 발생 함).

관련 문제