私はすべてのWebサイトをhttpsに強制しようとします。だから私はした:1つのURLを除いてHtaccess force httpsが機能しない
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
それは動作します。問題は、私がmywebsite.com/api/http://homewebsite.com/api/でhttp呼び出しをしたいということです。だから私はRewriteCond %{REQUEST_URI} !^/api(/.*)?
を追加します。
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api(/.*)?
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
しかし、それは動作しません:
私の.htaccessです。私はhttp://mywebsite.com/api/xxxに電話するとhttps://mywebsite.com/index.phpにリダイレクトされます。
私はなぜそれがわかりません。あなたはなにか考えはありますか?
私はZendの1
---- EDIT ----
はこれに私の.htaccessを変更使用:
RewriteEngine On
# HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api(/.*)?
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
Options +Indexes
IndexIgnore *
しかし、まだ
---動作しませんが - EDIT 2 ----
新しい.htaccess(これは動作しています):
私はQUERY_STRING
に条件を追加し、
index.php
にリダイレクト最後に変更しなければならなかった
RewriteEngine On
RewriteBase/
# HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api
RewriteCond %{QUERY_STRING} !^/api
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [NC,L,QSA]
あなたはあなたが間違った順序でディレクティブを持って
プロキシサーバーの背後にいますか? – MrWhite
@MrWhiteノップ、プロキシの背後にない – RichardLenoir