2009-08-25 12 views
23

mod_rewriteを使用してHTTPSに強制したいZend Frameworkアプリケーションがあります。 mod_rewriteについてはかなり失われています。ここに私のアプリケーションのルートにある私の現在の.htaccessファイルがあります。mod_rewriteでSSL/HTTPSを強制する

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php 

私が持っているものに基づいてアプリケーションをHTTPSに強制する最良の方法は何ですか?私がここで見つけたいくつかの例を試しましたが、試してみるとリダイレクトループや内部サーバーエラーが発生しています。

ありがとうございました!

+0

質問はZend Frameworkとは関係ありません。 googleでzendソリューションを検索するとかなり誤解を招く。 "もう一つのmod_rewrite質問"に名前を変更する必要があります。 – DanFromGermany

答えて

2

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301] 
36

あなたの現在のルールの前に、このルールを置く:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

ここで注意すべきポイントは、 "このルールを現在のルールの前に置く"です。これを最初のルールとします。私のサイトはいくつかのリダイレクトルールを持っていて、このルールを作るのは最初のトリックでした。 –

5

私は同様に、このソリューションを探していました。私はGumboのソリューションを追加しました。しかし、私のオリジナルは違っていました。私のサイト/アプリケーションのリライトは、あなたが特別に要求したファイルを除いて、index.php(fanyのURLと../applicationの場合)を通してすべてをリダイレクトします。 (イメージや公共のルートにある他の静的なファイルのような)これは私のオリジナルですが、これはずっと前にZFサイトから見つかったものです。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

サイト全体にSSLを強制するための追加ルールがあります。これまでのところ私にとってはうまくいく。

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
24

ガンボのソリューションは、あなたの平均的なApache Webサーバ用に正常に動作している間、私はプロキシ(例えばCloudFlare'dサイトやOpenShift)の背後にあるサーバ上のループをリダイレクト経験しました。次の解決策は、プロキシサーバと非プロキシサーバの両方でうまくいきます。

RewriteEngine On 

# If we receive a forwarded http request from a proxy... 
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] 

# ...or just a plain old http request directly from the client 
RewriteCond %{HTTP:X-Forwarded-Proto} ="" 
RewriteCond %{HTTPS} !=on 

# Redirect to https version 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Put the rest of your rewrite rules here 
+4

Cloudflareの柔軟なSSLを使用している場合、この回答の明確な+1。他のすべてのソリューションはリダイレクトループを作成しているようです – BellamyStudio

+0

ホームページだけがhttpsを強制していた一方、httpが許可されていた他のページではWordPressサイトで作業しました。注:これを動作させるには、.htaccessの '#BEGIN WordPress'より前にこのコードを書かなければなりませんでした。 – nikhilvj

+1

Herokuのためにこれを使用しました。クール! –

関連する問題