2015-01-20 2 views
1

mydomain.com/downloads/*에 대한 모든 요청을 download.php를 통해 실행하려고 시도했습니다. 또한 mydomain.com/some/path/downloads/*이 될 수 있기 때문에에서 가져온 동적 RewriteBase가 필요하지만 RewriteCond 패턴에서 생성 된 환경 변수를 사용할 때 작동하지 않으며 로그에 원시 % {ENV : BASE}를 사용하십시오. domain.com/some/path에서RewriteCond 패턴이 환경 변수를 확장하지 않음

htaccess로 :

RewriteEngine On 
RewriteBase/

# Dynamic RewriteBase from https://stackoverflow.com/a/21063276 
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$ 
RewriteRule ^(.*)$ - [E=BASE:%1] 

RewriteCond %{REQUEST_URI} ^%{ENV:BASE}/?download/(.*) [NC] 
RewriteRule .* %{ENV:BASE}/download.php?file=%1&%{QUERY_STRING} [L] 

재 작성 로그 :

(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225 
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225' 
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225::download/file/225' pattern='^(.*?/)(.*)::\\2$' => matched 
(5) setting env variable 'BASE' to '/some/path/' 
(3) [perdir /var/www/123/some/path/] add path info postfix: /var/www/123/some/path/download -> /var/www/123/some/path/download/file/225 
(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225 
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225' 
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/var/www/123/some/path/download' pattern='!-f' => matched 
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225' pattern='^%{ENV:BASE}/?download/' [NC] => not-matched 
(1) [perdir /var/www/123/some/path/] pass through /var/www/123/some/path/download 

BASE는 그러나가한다 RewriteCond이 체크인 할 때 확장 아니에요, 라인 4에 올바르게 설정되어 그것이 확장 되었다면 그것은 내가 알 수있는 것으로부터 잘 작동 할 것이다.

잘못된 점과 올바르게 작동하는 방법을 아는 사람이 있습니까?

Server 버전 : 아파치/2.2.15 (유닉스) RewriteRule에서 패턴과 일치하여 2 규칙을 RewriteBase 줄을 제거하고 수정하는

답변

2

:

이 에게
Options -MultiViews 
RewriteEngine On 

# Dynamic RewriteBase from http://stackoverflow.com/a/21063276 
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$ 
RewriteRule ^(.*)$ - [E=BASE:%1] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^download/(.+) %{ENV:BASE}/download.php?file=$1 [L,QSA] 
+1

감사합니다, 속임수를 썼는지 그 생각하지 않았다 규칙에 매치하는 것에 대해서. 규칙의 % 1을 $ 1로 수정해야합니다. 그렇지 않으면 파일 매개 변수가 비어 있습니다. – Phoenix

+0

아, 맞아요, 규칙을 수정하는 동안 그것을 바꿀 필요가 없습니다. 다행 했어. – anubhava

관련 문제