2012-07-08 5 views
2

내 질문은 SetEnvIf의 사용과 관련되어 있으며, 필자가 필요로 할 때 환경 변수를 올바르게 사용할 수있는 방법에 대해 설명합니다. 내가해야 할 일을 설명하고 내가 이미 가지고있는 것을 설명해 주겠다. ...Apache SetEnvIf 및 % {ENV : ...} 사용하기

필자의 htaccess 파일에 php 응용 프로그램 디렉토리를 설정해야하는데, 일부 재 작성 규칙은 해당 디렉토리 이름을 사용하기 때문에 노력하고있다. 관리자는이를 변경할 수 있습니다. 그것은 현재 PHP에서 설정되어 있으며 htaccess 파일에서 수동으로 변경 한 다음 PHP에서 다시 수행합니다. SetEnv 어떤 재 작성 후 처리로이를 달성하기 위해, 나는 현재, 그것은 어떤 재 작성 규칙 전에 ENV var에 세트를 얻기 위해 그 방법을 설정되어

SetEnvIf SERVER_PROTOCOL ".*" APP_DIR=application 

다음 (ENV를 사용에 관한 복용 조언 재 작성 규칙에 바르)가 규칙 인 반면에 SetEnvIf은 이전에 처리됩니다.

이제 재 작성 조건에서는 %{ENV:APP_DIR}을 사용하고 다시 쓰기 규칙에서는 두 번째 부분을 사용하여 APP_DIR에 액세스 할 수 있습니다.

응용 프로그램 디렉토리가 없기 때문에 좀 더 복잡하지만, PHP 응용 프로그램이 프런트 엔드가 아닌 백엔드로 처리하도록 알려주는 리디렉션입니다. 당신은 아마 볼 수있다 (예를 들어, ENV var에없는) 현재 재 작성 그래서, 나는 시스템의 관리자가 경로를 변경할 수 있도록 APP_DIR에 대한 application을 대체 할 수 있어야합니다, 그래서

### ADMIN REWRITE 
RewriteRule ^application\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^application(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L] 

### FRONTEND REWRITE - Will ignore files and folders 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L] 

있습니다 cms 또는 admin 등일 수 있습니다.

슬프게도, NG 정규식은 어떤 재기록되기 전에 처리되는

### ADMIN REWRITE 
RewriteRule ^%{ENV:APP_DIR}\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^%{ENV:APP_DIR}(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L] 

### FRONTEND REWRITE - Will ignore files and folders 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L] 

%{ENV:APP_DIR}

는 재기록의 정규식에 사용할 수없는 작동되지 않으며 ENV는 바르.

누구도 내가 원하는 것을 얻었습니까? 다시 쓰기 논리를 어느 정도 조정한다고해도 수행 할 수 있습니까? 필자는 이전 버전과의 호환성 문제가있는 기존 시스템의 경우 오랫동안 변경되었으므로 PHP 논리를 바꿀 수 없다고 명시해야합니다. 첫 번째 슬래시 (/)까지 환경 변수 %{REQUEST_URI}에 맞게

답변

1

사용 RewriteCond^[^/]*/RewriteRule 정규식을 시작합니다. 하위 디렉토리를 다루지 않으면 작동합니다. 그렇지 않으면 RewriteRule 정규 표현식에서 확실한 시작점을 벗어나야합니다.

+0

아시다시피, 이것은 여전히 ​​나를 괴롭 히며, 그 각도에서 생각하지 않았습니다. – designermonkey