私はhtaccess、apache、regexの初心者なので、愚かな質問をする場合はご容赦ください。
これが私の場合です:
上のユーザーがオプションでアクセスできるフォーラムがあります
http://mysite.net or
https://mysite.net.
アイデアは、自己署名証明書を使用した安価な共有ホスティングの趣味のプロジェクトであるため、モデレーターのみにhttpsが必要です。通常のユーザー、ゲスト、検索エンジンはHTTPを使用する必要があります。
フォーラムソフトウェアは相対リンクを少し知らないようで、常に内部ページの絶対リンクを作成します。したがって、HTTPバージョンのフォーラムを使用しているユーザーが別のトピックへの内部リンクを投稿すると、
http://mysite.net/topic....
また、HTTPSバージョンを使用しているユーザーが内部リンクを投稿すると、httpS://....になります。
問題:
HTTPバージョンのユーザーがHTTPSリンクをクリックすると、httpsサイトにリダイレクトされます。これは、ブラウザーからの自己署名証明書の警告がユーザーを怖がらせるため、望ましくありません。HTTPSバージョンのモデレーターがHTTPリンクをクリックすると、ログに記録されなくなるため、さらに悪化します(私は安全なセッションCookieを使用し、そのシナリオではセッションが中断します!)。
解決策:
私はhtaccessの書き換えルールについて考えていました。
https://mysite...
AND要求されたURLには
http://mysite.net/something
次のように書き直します
https://mysite.net/something".
逆もまた同様です。
しかし、私はapache mod_rewriteを本当に理解しておらず、正規表現はそれを行う方法がわかりません。Stackoverflowに関する多くのチュートリアルといくつかの質問を検索しましたが、例を適応させることができませんでした。私が得ている唯一の結果は、何もない/無条件のリダイレクト/無限ループです。
これが私にはうまくいかないいくつかの試みられたルールです:
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https://mysite\.net [NC]
RewriteCond %{REQUEST_URI} ^http://mysite\.net [NC]
RewriteRule ^(.*)$ https://mysite.net/$1 [R=301,NC,L]
また
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]