私は codeigniter で構築されたサイトを持っています。データベースの短い URL を使用し、ルールを書き換えてフル パスにリダイレクトします。
例えば、
RewriteRule ^secure-form$ form/contract/secure-form [L]
これはそれ自体でうまく機能します。しかし、特定のページで SSL を使用したいと考えています。これらのページのいずれかに移動すると、ページ内の http:// のすべてのインスタンスが https:// に置き換えられるようにコードを編集しましたが、それを使用するには URL も書き直す必要があります。
ページはすべて同じテンプレートを使用し、すべてのコンテンツはデータベースから取得されるため、特定のディレクトリで ssl を指定することはできません。
安全なページの URL はすべて「secure」で始まるため、次のルールを作成し、他のリライトの上に配置しました。
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure/?.*$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/secure/?.*$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^secure-form$ form/contract/secure-form [L]
RewriteRule ^secure-different-form$ form/contract/secure-different-form [L]
all other rewrite rules for specific pages follow
then the default rewrite further down...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
問題は、プロトコルを変更するルールを追加すると、URL に「secure-form」ではなく「form/contract/secure-form」が表示されることです。
これは、その URL を使用してそれ自体を構築するため、ページ上の実際のフォームを破損してレンダリングします。
プロトコルを変更するルールを削除すると、URL にセキュア フォームが表示されますが、ページは安全ではありません。
私は何を間違っていますか?
----更新---- おお、20時間以上の検索の後、ようやく答えが出たと思います. そのため、初めて https がオフになり、オンになります。その後、301 のために再度実行され、ページは form/contract/secure に送信されます... しかし、今回は https がオンになっています。uri はセキュアで開始されなくなったため、https をオフにします。
うまくいけば、これは他の誰かを助けるでしょう。