3

.htaccessユーザーが一部のページで SSL 接続を通過し、他のページでは通過しないようにするために、ファイルを編集しようとしています。

たとえば、login.php(場合によってはlogin.php?lo=true)というページにアクセスすると、ログインの詳細を入力します。訪問後、login.phpに進み、check_login.php成功した場合は に進みますindex.php

.htaccess私の質問は次のとおりです。次のことが発生するようにファイルを変更するにはどうすればよいですか。

  • http://www.site.com/login.php--->https://www.site.com/login.phpそして、次のような変数がある場合lo=true

  • http://www.site.com/check_login.php-->https://www.site.com/check_login.php

  • login.php または check_login.phpではない他のページはhttphttps

ModRewrite ルールに関する私の知識は限られているため、これまでに次のことを実装しました。

RewriteCond %{HTTPS} !=on
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^login\.php?lo=true$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

どんな助けでも大歓迎です。

4

2 に答える 2

3

?置換URLでを使用しない限り、クエリ文字列について心配する必要はありません。以下は、必要な2つのルールセットです(2番目のルールセットは、最初のルールのセットとは正反対です)。

RewriteCond %{HTTPS} !=on
RewriteRule  ^(?:login\.php|check_login\.php)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

RewriteCond %{HTTPS} =on
RewriteRule !^(?:login\.php|check_login\.php)$  http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

テストに302リダイレクトを使用したことに注意してください。301に変更することを忘れないでください。

于 2013-01-10T09:17:41.680 に答える
3

クエリ文字列をルールの正規表現に入れることはできません。クエリ文字列ではなく、URI のみが照合されます。試す:

RewriteCond %{HTTPS} off
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^check_login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/?(check_)?login\.php
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2013-01-10T09:12:03.160 に答える