2017-10-02 1 views
1

한 가지 예외가 index.html을합니다 :아파치 2.4 htaccess로 - 포인트는 모든 요청은 내가 현재 <code>.htaccess</code> 다음 한

<IfModule mod_rewrite.c> 
    Options Indexes FollowSymLinks 
    RewriteEngine On 
    RewriteBase /production/ 
    RewriteRule ^index\.html$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.html [L] 
</IfModule> 

웹 서버의 문서 루트가 현재 위의합니다 (.htaccess 파일에서 참조 /production 폴더입니다 /production이 삭제되고 모든 코드가 커밋됨에 따라 다시 작성되기 때문에 상위 폴더에 있음). 위 내용은 내 사이트로 유입되는 모든 트래픽을 index.html으로 안내합니다.

예외를 만들고 싶습니다. 요청이 www.mydomain.com/specialrequest이라면 부모 폴더에 script.php이라는 PHP 스크립트를 실행하고 싶습니다. 검토

, 이것은 내 /var/www/html 디렉토리입니다 :

-html 
    -production 
    -anotherfolder 
    -.htaccess 
    -script.php 

아파치가 /var/www/html/production 가리키는 내가 요청이 /specialrequest 경우를 제외하고 모든 요청은이 디렉토리에있는 index.html 파일에 가고 싶다 -이 경우, script.php을 실행하고 싶습니다.

답변

0

아파치 그래서, /var/www/html/production가 정말 DocumentRoot으로 정의된다 /var/www/html/production

를 가리키고 있습니다. 그래서 .htaccess 파일은 위의 문서 루트에 있습니다. 그리고이 특별한 요청을 받으면 다시 쓸 파일도 문서 루트 위에 있습니다.

불행히도 .htaccess 파일의 위치에 관계없이 .htaccess을 사용하여 문서 루트 위에있는 파일을 다시 쓸 수 없습니다. 디렉토리 .htaccess에있는 대체 파일은 URL 경로을 사용하므로 문서 루트 위의 URL로 재 작성하는 것은 단순히 유효하지 않습니다. 그러나 서버 구성 (또는 가상 호스트)에 액세스 할 수있는 경우이 방법을 사용하는 URL 경로 대신 (문서 루트 위 포함) 파일 시스템 경로로 다시 쓸 수 있습니다.

따라서 script.php.htaccess을 사용하여이 작업을 수행하려면 문서 루트 내에 있어야합니다. 이 경우에, 당신은 같은 것을 할 수있는 :

RewriteEngine On 

# Exception 
RewriteRule ^specialrequest$ /script.php [L] 

# Front controller 
RewriteRule ^index\.html$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.html [L] 

그러나이 경우에는, script.php은 (문서 루트 위)하지 /html/script.php에서 (문서 루트) /html/production/script.php에 위치 할 필요가있다 -에서와 같이 현재 파일 시스템 구조.

덧붙여서 .htaccess 파일의 RewriteBase /production/ 지시어는 완전히 불필요합니다. 어쨌든 상대 경로 대체를 사용하지 않지만 /production문서 루트이므로 /index.html (문서 루트 상대 URL- 경로)은 /production/index.html으로 다시 작성됩니다.


그러나 서버 구성 (또는 가상 호스트)에 직접 작성할 수 있으면 필요한 것을 수행 할 수 있습니다. 예를 들면 다음과 같습니다.

RewriteEngine On 

# Rewrite to filesystem path (in the server config) 
RewriteRule ^/specialrequest$ /var/www/html/script.php [L] 

# Front controller 
RewriteRule ^/index\.html$ - [L] 
RewriteCond %{LA-U:REQUEST_FILENAME} !-f 
RewriteCond %{LA-U:REQUEST_FILENAME} !-d 
RewriteRule ^/. /index.html [L] 
+1

주의 할 사항 downvote? – MrWhite

관련 문제