web-dev-qa-db-ja.com

特定のURLを除いてHTTPSをHTTPにリダイレクトする

/ user/loginである特定のURLを除いて、すべてのHTTPSトラフィックをHTTPにリダイレクトしたい

これまでのところ、次のものがあります。

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^user/login(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

しかし、HTTPにリダイレクトするときに、リダイレクトループが発生します

1
Tom

私はこれがトリックをするべきだと信じています:

RewriteEngine On
RewriteBase /

# Turn SSL on for /user/login
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/user/login
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]

# Turn SSL off everything but /user/login
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/user/login
RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]

上記は以下を行います:

1. User types: https://yourdomain.com/user/login - no redirect
2. User types: http://yourdomain.com/user/login -> redirect to: https://yourdomain.com/user/login
3. User types: https://yourdomain.com/somerandomfile.php -> redirect to: http://yourdomain.com/somerandomfile.php
4. User types: http://yourdomain.com/somerandomfile.php - no redirect
3

このようなものが機能するはずです:

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/user/login
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R,L]

しかし、これは私にはあまり意味がありません。リクエストのみをSSL経由で/ user/loginにリダイレクトし、それ以外はすべてそのままにしておくとよいでしょう。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule /user/login(.*) https://%{HTTP_Host}/user/login$1 [R,L]
5