3

これらの線に沿って多くの質問があったことを認識していますが、この時点でそれらのほとんどすべてを読んでおり、私の状況は独特だと思います.

私は基本的に .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 リダイレクトが返されるようです。奇妙に聞こえるかもしれませんが、そうでなければ質問しません。

なぜこれが起こっているのですか?どうすれば修正できますか?

4

1 に答える 1