mod_rewrite HTTPアクセスをHTTPSに統一
.htaccessを編集していますが、思い通り動作せず皆様のお力添えを頂きたく思います。
したいこと:
- HTTPアクセスをHTTPSに統一
状況:
- リダイレクトループになってしまう。
環境:
- AWS ロードバランサー でSSL設定済み
- Apache 2.4
- Laravel5.1LTS
.htaccessはLaravel5.1にあったものを編集しています。
他:
- .htaccessとログを記載します。
.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{HTTPS} on # HTTPSアクセスの場合
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f # ファイルが存在しない場合
RewriteRule . index.php [L] # index.phpに書き換えて終了
RewriteCond %{HTTPS} off # HTTPアクセスの場合
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L,R] # https://ホスト名/URI にリダイレクトし終了
</IfModule>
ログ (主要な部分を抜き出しています)
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '^(.*)/$' to uri 'path/to'
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '.' to uri 'path/to'
RewriteCond: input='off' pattern='on' => not-matched
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '.' to uri 'path/to'
RewriteCond: input='off' pattern='off' => matched
RewriteCond: input='/var/www/html/path' pattern='!-d' => matched
RewriteCond: input='/var/www/html/path' pattern='!-f' => matched
rewrite 'path/to' -> 'https://myhostname/path/to'
explicitly forcing redirect with https://myhostname/path/to
escaping https://myhostname/path/to for redirect
redirect to https://myhostname/path/to [REDIRECT/302] -->ここまでをループしている
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '^(.*)/$' to uri 'path/to'
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '.' to uri 'path/to'
RewriteCond: input='off' pattern='on' => not-matched
add path info postfix: /var/www/html/path -> /var/www/html/path/to
strip per-dir prefix: /var/www/html/path/to -> path/to
applying pattern '.' to uri 'path/to'
RewriteCond: input='off' pattern='off' => matched -->httpsでリダイレクトした筈なのに。。
RewriteCond: input='/var/www/html/path' pattern='!-d' => matched
RewriteCond: input='/var/www/html/path' pattern='!-f' => matched
rewrite 'path/to' -> 'https://myhostname/path/to'
explicitly forcing redirect with https://myhostname/path/to
escaping https://myhostname/path/to for redirect
redirect to https://myhostname/path/to [REDIRECT/302]
・
・
同じのが延々と続く
また、.htaccessが今ひとつ理解出来ておらず、記載が冗長な気もしており、もっとスマートな記述方法などがございましたら教えていただきたいです。
よろしくお願いします。