ワニスを実行しているApache2.2サーバーで、http->をhttpsにリダイレクトしようとしていますDrupal Commons( http://commons.acquia.com/ ) 地点。
ワニスはいくつかのリダイレクトをキャッシュするので(R = 301ですが、R = 302ではないと思います)、最初にリダイレクトを:8080で機能させましたが、これはワニスによって提供されていません。
以下の.htaccessコードは、http:// foo.example.com:8080をhttps://foo.example.comに正常にリダイレクトします。 (Chrome、FF、Safariで動作します。)
# RewriteBase /
### Standard Drupal7 .htaccess above here ###
# SSL REWRITES
RewriteCond %{SERVER_PORT} ^8080$
RewriteRule ^(.*)$ https://foo.example.com/$1 [NC,R=302,L]
### Standard Drupal7 .htaccess below here ###
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
もし私が
(私は.htaccessを編集するたびに上記を忠実に行いました。)
Http://foo.example.comにアクセスすると、Chrome、FF、Safariでリダイレクトループが発生します。
ループを理解するために、リダイレクトを次のように変更しました。
# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://foo.example.com/$1/%{SERVER_PORT} [NC,R=302,L]
これをロケーションバーに表示しました:https:// foo.example.com/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80/80
ブラウザがhttpsURLに転送されるとき、SERVER_PORT = 443 ???
R = 301に変更すると、同じループが発生します。
%{HTTPS}をテストすると、同じループが発生します。
# SSL REWRITES
#RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://foo.example.com/$1/%{HTTPS} [NC,R=301,L]
これをロケーションバーに表示します:https:// foo.example.com/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off/off
あたり http://drupal.org/node/181233#comment-278142 (および http://drupal.org/node/823232#comment-3075288 )私も試した:
# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://foo.example.com/$1/%{SERVER_PORT} [NC,R=301,L]
ありとなしで試してみました! -fと-dの否定。いずれにせよ、条件が一致しないため、何も起こりません。これらの-f、-dテストが必要な理由はわかりません。
また、RewriteRuleで正規表現の置換を削除してみました
# SSL REWRITES
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://foo.example.com/ [R=301,L]
これでもループが発生します。
どんな助けでも大歓迎です。
サーバー管理者から、このサーバーでSSLをPoundで終了していることがわかりました。つまり、SSLは機能しますが、HTTP_SERVER変数は私が期待した値を反映していません。 SERVER_PORTは常に80になり、HTTPSは実際の状態に関係なく常にオフになります。
Mod_rewriteを使用する場合は、サーバー変数をダンプして、RewriteCondで何をテストできるかを確認してください。 http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html#PHP_Code_access_Apache_Variables を参照してください。
ほとんどのプログラミング言語を使用して、httpをhttpsにリダイレクトすることもできます。 Drupalの443sessionモジュールがこのサイトで動作しています-それはそのアプローチを使用しています。 (HTTPSがオンになっていることを検出できなくても、モジュールにルールを設定するように指示する必要はありませんでした。)
安全なセッションCookieも使用してください。セッションハイジャックを防ぐために、mod_sslに加えてそれらが必要です。
Drupalこれは古いですが、良いです http://drupalscout.com/knowledge-base/drupal-and-ssl-multiple-recipes-possible-solutions-https = drupal.org/project/443sessionが現在最良のモジュールオプションだと思います。