このアプリケーションでは、クレジットカード情報を処理しているため、SSLを使用したい支払いページがあります。特定のページへのリクエストをHTTPSにリダイレクトするためのApacheの書き換えルールはすでに用意されています-これにより、支払いページへの直接のリクエストが処理されます( http://oursite.com/pay =)。
しかし、私たちのサイトのほとんどのナビゲーションは、angularjsで ui-router
を使用して相対URLとstates
を介して行われ、Apacheがこれらのリクエストをキャッチしないため、 SSL。
EXユーザーがui-sref='pay'
ui-router
のリンクをクリックすると、テンプレートが読み込まれ、状態が更新されます。どの時点でも、サーバーに新しいURIのリクエストが行われないため、Apacheはhttpsにリダイレクトできません。
ui-router(またはangular一般的に)を強制して、すべてのリンクを変更して全体をリロードする必要なしに状態をHTTPSを使用するように強制する方法はありますかサイト?
もちろん、これは書き換えルールの欠点かもしれません...これまでのところ
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} /pay
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^ index.html [L]
ルールの2番目のセットは、アプリにhtml5modeを適用することです。
RewriteCond %{REQUEST_FILENAME} !-f
は、SSLを必要とせずにangularが州の支払いテンプレートを取得できるようになっています。これで問題ありませんか?
SPAアプリケーションで$ routeProviderを使用していましたが、同様の問題がありました。私がしたことは、コントローラ内でリダイレクトを強制することでした:
var forceSSL = function () {
if ($location.protocol() !== 'https') {
$window.location.href = $location.absUrl().replace('http', 'https');
}
};
forceSSL();
ただし、これはすべてのリソースをリロードします。ただし、これはSSLモードに切り替えたときに1回だけ発生します。
関数は実際にはサービス内にあるため、どこからでも呼び出すことができることに注意してください。
これがお役に立てば幸いです。