2017-04-07 8 views
0

Apache2 mod_rewrite로 액세스를 제어하려고합니다. 특히 나는 특정 IP가 내 사이트에 액세스하도록 허용하려고합니다.Apache2 mod_rewrite에서 MySQL 쿼리의 결과를 여러 개 사용할 수 있습니까?

은 내가

RewriteMap hosts-allow "txt:/path/to/hosts.txt" 

등의 파일을 사용할 수 있습니다 이해 그리고 나는 또한 SQL 쿼리를 사용할 수 읽었습니다,하지만 분명히 그것은 단지 하나 개의 결과를 작동하고 여러 행이 다음 반환되는 경우는 사용 임의의 것. 여러 결과를 사용할 수있는 방법이 있습니까?

그렇지 않으면 여러 결과를 사용하기 위해 MySQL에서 IP를 저장하여 자동으로 파일을 모두 자동화해야합니까?

그렇다면 Apache2는 파일이 변경 될 때 자동으로 캐시를 플러시합니까?

모든 통찰력, 감사 :

답변

0

내가이 일을하는 데 매우 환영합니다.

비슷한 문제가 있다면 Apache2 파일 000-default.conf (Linux 배포판에서이 파일의 위치를 ​​찾으십시오)가 다음과 같이 표시되어야합니다. 이제

<VirtualHost *:80> 

    DBDriver mysql 
    DBDParams "host=localhost,user=root,pass=password,dbname=name" 

    RewriteMap whitelist "dbd:SELECT ip FROM users WHERE ip = %h LIMIT 1" 

    <Directory /var/www> 
     RewriteEngine On 
     RewriteCond "${whitelist:%{REMOTE_ADDR}|FOUND}" "FOUND" 
     RewriteRule "^" "" [F] 
    </Directory> 

    ... 

</VirtualHost> 

여기에 약간에게

RewriteMap whitelist "dbd:SELECT ip FROM users WHERE ip = %h" 

매개 변수 %의 시간을 설명하는 요청의 IP 주소를 의미합니다, 그래서 SQL 쿼리에서 여러 결과를 사용하지 않고, WHERE부터하는 행만 반환됩니다 조건이 충족되면 모든 IP 양에 대해 작동 할 수 있습니다.

RewriteCond "${whitelist:%{REMOTE_ADDR}|FOUND}" "FOUND" 

: 가장 가능성이 SQL 쿼리와 함께 발견 된 유일한 IP 주소를 포함 할 화이트리스트에 REMOTE_ADDR을위한 % {REMOTE_ADDR} 검색, 그렇지 않으면 빈입니다.

RewriteRule "^" "" [F] 

여기 [F]를 예를 들어 [R]를 리디렉션하기로 설정할 수 있습니다, 금지 된 것을 의미하지만 당신이 그것을 사용하는 방법에 대한 자세한 정보를 조회해야하고, "^"는이 규칙이 있음을 의미합니다 모든 URL에 적용됩니다.

빈 ""은 Apache2가 .txt 맵에서 예상하는 키 구분 기호 (?)이지만 SQL 쿼리를 사용하기 때문에 여기에 아무 것도 없습니다. 당신이 (데비안 8 예를 들어) 패키지를 설치 MySQL과

sudo apt-get install libaprutil1-dbd-mysql 

또는 그렇지 않으면 아파치가 설정 한 후 시작을 시작되지 않습니다 당신이 한 mod_dbd 사용하려면

DBDriver는 MySQL로

또한 mod_rewrite를을 활성화하고

a2enmod rewrite 
a2enmod dbd 

이 누군가에 대한 도움이되었습니다 희망과 아파치에 mod_dbd해야

,536을 :)