2011-11-17 3 views
0

지난 몇 시간 동안 나는 페이지를 SSL로 리디렉션하는 데 약간의 문제가있었습니다. 다음과 같이SSL로 리디렉션하기위한 htaccess

내 설정은 다음과 같습니다 내가 데비안에서 아파치 2.2.16에 전자 상거래 사이트 에 대한 다음의 .htaccess가있는 모든 요청은 인덱스에 전달되는

RewriteEngine On 
RewriteBase /shop 
RewriteCond $1 !^(index\.php|products|img|theme\.php|checkout\.php) 
RewriteRule ^(.*)$ index.php?/$1 [L] 

(필요한 모든 개조는 가능). php는 내 컨트롤러로 작동하며 필요에 따라 기타 .php 파일을 포함합니다.

RewriteEngine On 
RewriteBase /shop 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteCond %{SERVER_URI} checkout\.php 
RewriteRule ^checkout.php?/$1 https://localhost/shop/checkout.php?/$1 [L,R] 
RewriteCond $1 !^(index\.php|products|img|theme\.php|checkout\.php) 
RewriteRule ^(.*)$ index.php?/$1 [L] 

:

은 지금 나는 그것이 내 htaccess로 변경 등 쉽게 것이라고 생각 영리라는 PHP 스크립트 checkout.php

인 체크 아웃 프로세스에 대한 HTTPS를 사용하려면 그래서 checkout.php는 index.php에 의해 처리되지 않습니다. 분명히 그렇게 간단하지 않습니다. 나는 아마 계산서에 하드 코드 된 https 링크를 사용하여 그것을 할 수 있었지만 mod_rewrite로 그것을 선호한다. 누군가가 에 대한 통찰력을 공유 할 수 있다면 정말 고맙겠습니다. 사전에

덕분에

+0

% {SERVER_PORT}을 (를) 검사하는 대신 % {HTTPS}을 (를) 확인해보십시오. –

답변

0

은 몇 가지 문제가 있습니다. 먼저, 첫 번째 RewriteRule의

RewriteRule ^checkout.php?/$1 https://localhost/shop/checkout.php?/$1 [L,R] 

의 패턴이 잘못 기록됩니다. $1은 의미가 없습니다 (캡처 결과이지만 아직 캡처가 발생하지 않았습니다). RewriteRule documentation에 나와있는 것처럼 쿼리 문자열 (? 이후 요청의 일부)이 일치하는 부분이 아닙니다.

두 번째로 SERVER_URI 대신 REQUEST_URI을 사용해야한다고 생각합니다.

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/checkout\.php 
RewriteRule .* https://localhost/shop/checkout.php [L,R] 

RewriteCond %{REQUEST_URI} !^/(index\.php|products|img|theme\.php|checkout\.php) 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

몇 가지 참고 사항 :

그래서 나는 당신이 이런 식으로 뭔가 할 생각 당신은 일치하거나 첫 RewriteRule의에서 쿼리 문자열에 다시 추가 할 필요가 없습니다

  • 을; mod_rewrite가 자동으로 다시 추가합니다.
  • @ Lin Lin이 제안한대로 RewriteCond %{SERVER_PORT} !443 대신 RewriteCond %{HTTPS} off을 테스트하는 것이 일반적입니다.
  • 두 번째 RewriteRule에 QSA flag을 추가 할 수 있습니다.
관련 문제