0

上記の質問に対する回答を探しているときに、解決策としてこのスクリプトに遭遇しました (ログイン、登録、管理などのいくつかのページを除いて、http に Web サイトを置きたいです):

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# force https for /login.php and /register.php
RewriteCond %{HTTPS} =off
RewriteRule ^(login|register)\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# don't do anything for images/css/js (leave protocol as is)
RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L]

# force http for all other URLs
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/(login|register)\.php$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

この正確な例は私のサーバーで動作するはずですが、部分的にしか動作しません。つまり、すべてのページを http にリダイレクトしますが、login.php または register.php を開くことができません。Web ブラウザーは、これらのページにリダイレクト ループが含まれており、表示できないと述べています。私は決して mode_rewrite や htaccess の専門家ではないので、助けていただければ幸いです。

編集: 提案に従って、mywebsite を chrome プラグインで実行しました。ページ login.php に http->https->http などのリダイレクト ループがあることを発見しました (そのページの他のリダイレクトは、ユーザーが既に署名されている場合のみですが、このループの原因とは思えません)。 . SSLを設定するためのさまざまなコードも試しましたが、これは機能します:

# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Turn SSL on for payments
RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/login\.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Turn SSL off everything but payments
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/login\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

そして、これは正しく機能していますが、https の例外は 1 つだけであり、もっと多くしたいと思います (約 6)。最初のスクリプトが機能しない理由を誰か知っていますか? または、より多くのhttps Webサイトを持つために2番目のものを変更する方法は?

ありがとう

4

1 に答える 1

1

私は同様の問題を抱えていましたが、これが私にとってはうまくいきました。

httpd.conf の仮想ホストの下に、次の両方があることを確認します。

サーバー名 domain.com

サーバーエイリアス www.domain.com

VirtualHost *:80 および VirtualHost *:443 の両方

于 2013-12-02T03:40:42.657 に答える