-1

私は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]
4

1 に答える 1

0

これに対する mod_rewrite ソリューションはありません。なぜなら、書き換えルールが実行されるまでに、リクエストはすでに作成されており、何らかの悪い副作用がすでに発生しているからです。ユーザーが https リンクをクリックしたかどうかを確認した時点で、リクエストが行われる前に証明書が送信されるため、既に悪い証明書の警告が発生しています。モデレーターが https 以外のリンクをクリックするまでに、リクエストは既に行われており、Cookie は送信されず、モデレーターはログアウトされます。ただし、セキュリティで保護された Cookie が HTTP 要求によって上書きされず、モデレーターが HTTPS に戻ったときに古いセッション Cookie が保持される可能性があります。

この修正は、フォーラム ソフトウェアに対して行う必要があります。https://mysite.netの部分を削除するだけで、すべてが機能します。

于 2012-12-26T19:43:05.197 に答える