답변:
mod_rewrite ( .htaccess
파일 또는 기본 서버 컨텍스트 또는 ServerName
호스트의 IP 주소 인 별도의 VirtualHost )를 사용하여이를 수행 할 수 있습니다.
RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]
이것은 HTTP_HOST 헤더가 ip 주소 1.2.3.4와 일치하면 모든 요청이로 충족되어야합니다 403 Forbidden
. 다른 HTTP_HOST 헤더가있는 요청 (예 : IP 주소가 아닌 실제 도메인 이름을 가진 요청)은 영향을받지 않아야합니다.
IP를 통한 직접 액세스를 차단할 수 없습니다. 연결을 허용 한 다음 무엇을해야할지 결정해야합니다. 403, 404를 반환하거나 원하는 페이지로 리디렉션 할 수 있습니다. mod_rewrite로이를 수행 할 수 있습니다.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule ^(.*)$ - [F,L]
웹 클라이언트가 전달한 HTTP HOST 헤더와 일치합니다. 다른 모든 요청은 통과합니다.
그러나 SEO 목적으로 URL을 정규화 할 수 있습니다.
이 방법을 사용하면 원하는 결과와 일치하지 않는 내용을 다시 작성하십시오.
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
참조 : https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl
이 솔루션은 모든 경우를 다루지는 않습니다.
IP URL의 숫자 나 점을 % ## (예 : 1 x % 31 ... 8 x % 38)로 바꾸면 도메인 URL이 아닌 IP에 도착하게됩니다.
설명을 쉽게하기 위해 사용 된이 잘못된 IP를 가정하십시오. 123.45.6.789
모든 숫자와 점에 대해 두 가지 대안을 사용해야합니다. 도트는 % 2E이고 0..9는 % 30 .. % 39
RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]
미묘하게도 {1,3}으로 줄일 수 있고 유효한 IP로 제한 될 수 있지만, IP에 대해서는 그렇게 할 필요가 없습니다.
": 80"과 같은 포트를 잊지 마십시오. HTTP_HOST에 포함되어 있으며 SERVER_NAME이 (가) 신뢰할 수 없습니다.