codeigniter でサイトを構築しています。.htaccess ファイルに一連の書き換え条件とルールがあります。ルールの最初のセットは、URI の最初のセグメントに応じて SSL をオンまたはオフにします。
その後、再びループし、一致が見つかった場合は、ページを適切にリダイレクトします。一致するものがなく、URI がリストされている文字列のいずれでも始まらない場合は、別のページにリダイレクトされます。条件が満たされない場合は、インデックス ページに移動します。
問題は、SSL のオンとオフを切り替える最初の一連のルールにあります。uri が admin または secure で始まる必要があることを指定したいと思います。しかし、文字列の先頭に ^ を追加すると、すべてが壊れます。ここに私が持っているものがあります:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/?(admin|secure)
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/?(admin|secure)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
...specific rewrites here
RewriteRule ^secure-form1$ secure/contract/secure-form1 [L]
RewriteRule ^secure$ secure/article/secure [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{REQUEST_URI} !^/(admin|form|secure|page)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/page/article/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
最初の 2 つの書き換え条件 (https のオンとオフ) で ^ 記号を保持すると、 http://www.example.com/secureがhttps://www.example.com/index.php/secure/article/ に書き換えられ ます。 最後の書き換えルールであるセキュア。URLは実際にはブラウザでこれに変わります。
最初の 2 つの書き換え条件から ^ 記号を取り除くと、右のページに移動します。しかし、SSL を使用してはならない URI の途中 (およびスラッシュの後に) に「セキュア」があるページが他にもあるため、URI の先頭を指定する必要があります。
私はこれを理解することはできません。