2013-01-10 4 views
3

사용자가 다른 페이지가 아닌 일부 페이지에 대해 SSL 연결을 사용하도록하려면 .htaccess 파일을 편집하려고합니다.http에서 https 또는 https로 페이지를 조건부로 리디렉션

예를 들어 login.php (때로는 login.php?lo=true)이라는 페이지를 방문하면 로그인 세부 정보를 입력합니다. 그들은 login.php을 방문한 후 check_login.php으로 진행하고 성공하면 index.php으로 이동합니다.

내 질문은 이것이다 : 나는 위해서는 내 .htaccess 파일을 변경합니까 어떻게 발생하는 다음> --- https://www.site.com/login.php

  • http://www.site.com/login.php과 같은 lo=true

  • 같은 변수가있는 경우 http://www.site.com/check_login.php ->

  • 다른 페이지 : login.php 또는 check_login.php는 http하지 될 수 https

ModRewrite 규칙의 내 지식은 제한되어 지금까지 나는 다음과 같은 구현 :

RewriteCond %{HTTPS} !=on 
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteRule ^login\.php?lo=true$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

어떤 도움이 크게 될 것 고맙습니다.

답변

3

당신은 대체 URL에 ?을 사용하지 않는 쿼리 문자열에 대해 걱정할 필요가 없습니다. 나는 302이 테스트를 위해 리디렉션을 사용했다

RewriteCond %{HTTPS} !=on 
RewriteRule ^(?:login\.php|check_login\.php)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] 

RewriteCond %{HTTPS} =on 
RewriteRule !^(?:login\.php|check_login\.php)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] 

참고 : 다음은 당신이 필요로하는 규칙의 두 가지이다 (규칙의 두 번째 세트는 첫 단순히 반대입니다). 301로 변경하는 것을 잊지 마세요.

3

규칙의 정규식에 쿼리 문자열을 넣을 수 없으며 URI 만 일치하고 쿼리 문자열은 일치하지 않습니다. 시도 :

RewriteCond %{HTTPS} off 
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{HTTPS} off 
RewriteRule ^check_login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^/?(check_)?login\.php 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

'HTTPS'는 '켜기'로 설정되거나 설정되지 않습니다. 나는 '오프'를 보지 못했다. –

+1

@SalmanA 적어도 [Apache 2.2] (http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond)부터 * "연결이 SSL/TLS 또는 "off"그렇지 않으면 "* –

+0

예. 나는 틀린 장소를보고 있었다. –

관련 문제