2011-08-14 7 views
4

私は、次のしている:htaccessファイル:選択したディレクトリ上の力のhttpすべてのページとhttps

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} protected [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !protected [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

のディレクトリが「保護」と呼ばれている場合は、ユーザーがHTTPSを使用していることを確認してください。ディレクトリが "protected"以外のものなら、ユーザーがhttpを使用していることを確認してください。

これは効果的ですが、追加のディレクトリを指定するにはどうすればよいですか?

また、ディレクトリを2回指定しなくてもこれを実現できる方法はありますか?それを含めるために1回とそれを除外するために1回?

ありがとうございます!

UPDATE

私の「保護」フォルダが原因私のルールにhttpsを使用することを余儀なくされたものの、まだにリダイレクトされていた「保護」フォルダ内にありませんでした、画像、スタイルシートとJavaScriptのへの参照http。これにより、「保護された」ページが部分的にしか保護されなくなります。 (あなたが誤って削除したことがないLocationMatchはhtaccessファイルでは使用できませんが、その方法は、あなたが作ることができる)

RewriteRule \.(css|gif|jpe?g|js|png|swf)$ - [L] 

答えて

7
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} protected [NC,OR] 
RewriteCond %{REQUEST_URI} protected2 [NC,OR] 
RewriteCond %{REQUEST_URI} protected3 [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !protected [NC] 
RewriteCond %{REQUEST_URI} !protected2 [NC] 
RewriteCond %{REQUEST_URI} !protected3 [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

のための単一の行の正規表現をコピーするのは簡単です
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteCond

+0

良い解決策あなたはhtaccessファイルに限定されている場合:


はここでmod_rewriteを条件に、より詳細です。 – yakatz

+4

.htaccessに制限されていない方がよい解決策は何ですか? –

+0

WordPressを使用している場合は、デフォルトのWordPressが書き換えられる前にこれらを挿入する必要があります。そうしないと、期待通りに動作しない可能性があります。 – cfx

0

私はバーチャルホストの設定でそれを行う:リダイレクトコードを次のように前を追加すると、これが解決し
(注:サーバーとの__SERVER__を置き換え、それは自動ではありません。)

<VirtualHost *:80> 
    ... 
    <LocationMatch "(.*(p|P)hpMyAdmin.*)"> 
     RedirectPermanent/https://__SERVER__/ 
    </LocationMatch> 
</VirtualHost> 
<VirtualHost *:443> 
    ... 
    <LocationMatch "!(.*(p|P)hpMyAdmin.*)"> 
     RedirectPermanent/http://__SERVER__/ 
    </LocationMatch> 
</VirtualHost> 

を私は(非セキュアにリダイレクト)は、第2のシナリオをテストしたことがないが、それは(!配置についてはよく分からない)動作するはずです。私はまだ二度、それらを指定しないための良い方法を発見していない、あなたがより多くのオプションを追加するためにORを使用することができますLocationMatch

関連する問題