일부 디렉토리에 대해 SSL을 사용한 액세스 만 허용하도록 Apache를 제한하십시오. 거부되거나 이상적으로 https로 리디렉션되어야합니다. http://myserver.com/public 에는이 제한이

SSL을 사용하여 액세스 해야하는 여러 서비스를 호스팅하는 SSL 인증서가있는 Apache 2.2 서버가 있습니다.

즉, https : //myserver.com/topsecret/은 허용되어야하지만 http : //myserver.com/topsecret/은 거부되거나 이상적으로 https로 리디렉션되어야합니다.
http://myserver.com/public 에는이 제한이 없어야하며 http 또는 https를 사용하여 작동해야합니다.
http 허용 / 거부 결정은 최상위 디렉토리에서 이루어지며 그 아래의 모든 내용에 영향을줍니다.

이러한 방식으로 액세스를 제한하기 위해 Apache 구성에 배치 할 수있는 지시문이 있습니까?



답변

SSLRequireSSL의 지시자는 당신이 찾고있는 것입니다.

내부 <VirtualHost>또는 가상 호스트를 사용하지 않는 경우 최상위 레벨 :

<Directory /topsecret>
  SSLRequireSSL
</Directory>

또는 .htaccess:

SSLRequireSSL

답변

전역 구성에서는 다음을 사용할 수 있습니다.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

마찬가지로 보안 디렉토리 트리의 첫 번째 디렉토리에서 .htaccess 파일을 사용할 수 있습니다.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

마지막 하나는 전역 또는 가상 호스트 구성에서 디렉토리 지시문 안에 배치 할 수도 있습니다.


답변

또는 Apache의 구성 옵션을 사용하지 않고 서버 측 언어를 사용하여 처리 할 수 ​​있습니다 (아마도 서버 구성에 액세스 할 수없는 경우).

예를 들어, PHP의 경우 :

if (!isset($_SERVER['HTTPS'])) {
  // put your redirect here
  header('Location: http://myserver.com/public');
}

(단지 알고 있지만 Microsoft IIS에서 ISAPI를 사용하는 경우 요청이 HTTPS를 통해 라우팅 되지 않으면 $ _SERVER [ ‘HTTPS’] 변수의 값은 “off”가됩니다)


답변

누군가 SSLRequireSSL을 언급했지만 그 자체로는 효과가 없다고 생각하며 성공적인 예를 찾지 못했습니다. 권장되는 방법은 https://wiki.apache.org/httpd/RedirectSSL입니다. 적용했으며 잘 작동합니다!


답변

VirtualHost 지시문을 사용한다고 가정하면,

액세스를 거부하는 비 SSL 가상 호스트에 디렉토리 지정 문을 배치하십시오.

그런 다음 액세스 권한을 부여하는 ssl 가상 호스트에 Directory 지시문을 배치하십시오.


답변

나는 항상 .htaccess 파일 에서이 mod_rewrite를 수행했지만 기본 구성 파일 에서도이 작업을 수행 할 수 있어야합니다.

이를 수행하는 몇 가지 방법이있는 가이드가 있습니다.
스마트 HTTP 및 HTTPS RewriteRule 리디렉션