2011-08-03 2 views
0

현재이 .htaccess를 사용하여 디렉토리가있는 페이지의 모든 요청을 내 index.php로 리디렉션합니다.주소 재 작성 중 .htaccess로 SSL 강제 실행

RewriteEngine on 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ /seattle/index.php/$1 [L] 

그리고이 작업은 정상적으로 작동하며 index.php를 숨기는 URL을 생성하며 코드가 있습니다. index.php는 URL을 깨끗하게 보입니다.

하지만 이제 강제로 ssl을 통해 페이지를 연결해야하므로

RewriteEngine on 
RewriteCond %{SERVER_PORT} 80 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ https://example.com/seattle/index.php/$1 [L] 

를 강제로 ssl로 작동하지만 이제는 URL에 강제로 index.php가 포함됩니다.

https://example.com/seattle/index.php/pagename 

https://example.com/seattle/pagename 

무엇이 누락 되었습니까?

답변

1

프로토콜 (HTTP -> HTTPS) 및/또는 도메인 이름 (www.example.com ->example.com)을 변경하려면 적절한 리디렉션 ("301 Permanent Redirect"또는 "302 Found/Temp Redirect")이 필요합니다.

따라서 재 작성 및 리디렉션을 결합 할 수없고 원본 URL을 계속 표시 할 수 없습니다. 그것은 2 개의 다른 규칙이어야하며 프로토콜/도메인을 변경하기위한 규칙이 먼저 나열되어야합니다. 예를 들어 :

RewriteEngine on 

# force HTTPS for all URLs 
RewriteCond %{HTTPS} =off 
RewriteRule . https://example.com%{REQUEST_URI} [R=301,L] 

# other rewrite rules 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ /seattle/index.php/$1 [L] 

내가 추가 한 규칙은 HTTPS에 ALL HTTP URL을 리디렉션합니다. 리다이렉트하기 위해 일부만 필요하면 추가 RewriteCond 회선을 통해 적절한 조건을 추가하십시오.

%{HTTPS}은 SSL이 켜져 있는지 또는 꺼져 있는지를 확인하는 가장 일반적인 종류의 "적절한"방법입니다 (그러나 특정 상황과 서버 구성에 따라 다름). %{HTTPS}을 확인할 때 사이트가 비표준 포트 (80 제외)에서 실행되는 경우 상황에 대해 안전합니다. 대신 %{SERVER_PORT} =80을 사용할 수 있습니다 (대부분의 경우 작동합니다). 위의와

http://example.com/seattle/pagename에 대한 재 작성 2 단계에서 발생합니다 규칙 :

  1. 301 리디렉션 /seattle/index.php/pagename
+0

한 아름다운 다시 쓰기 (내부 리디렉션)

  • https://example.com/seattle/pagename에, 당신은 바위! –