これらの線に沿って多くの質問があったことを認識していますが、この時点でそれらのほとんどすべてを読んでおり、私の状況は独特だと思います.
私は基本的に .htaccess を使用してすべてに HTTPS を強制しようとしていますが、1 つのディレクトリ (海賊と呼ばれます) ではオプションにしています。私は以前にこのようなことをしたことがありますが、今回は協力しませんでした。最初に、すべてに HTTPS を使用するよう強制するこのコードから始めました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
次に、例外を追加しました (ここでは最初のルールのみを示しています)。
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^(/pirate/) [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
それはそれを行う必要があります!すべてのコントローラーは HTTPS に接続する必要があります。
1) http://www.mysite.com/contact/ -> https://www.mysite.com/contact
小切手。私の海賊版コントローラーも HTTPS を実行できるはずです。
2) https://www.mysite.com/pirate/ -> https://www.mysite.com/pirate/
変化なし。完全!最後に、海賊版のコントローラーは古き良き HTTP を実行できるはずです。
3) http://www.mysite.com/pirate/ -> https://www.mysite.com/index.php?/pirate/
それは正しくありません。それでも HTTPS を強制し、index.php を隠すことをやめました。要約すると、2 つの条件と 1 つのルールがあります。最初の条件が true で 2 番目の条件が false の場合、ルールが適用され、次に 2 番目のルールが適用され、301 リダイレクトが返されるようです。奇妙に聞こえるかもしれませんが、そうでなければ質問しません。
なぜこれが起こっているのですか?どうすれば修正できますか?