Mat*_*can 18 javascript .htaccess mod-rewrite ssl angularjs
在我们的应用程序中,我们有一个支付页面,我们要使用SSL,因为我们正在处理信用卡信息.我们已经为apache实施了重写规则,将请求重定向到特定页面到HTTPS - 这会处理对付款页面的任何直接请求(http://oursite.com/pay).
然而,我们站点中的大多数导航都是通过相对URL并在angularjs中states使用ui-router,我们发现apache不会捕获这些请求,因此在没有SSL的情况下提供页面.
EX如果用户单击链接并ui-sref='pay' ui-router加载模板并刷新状态 - 在任何时候都没有向服务器请求新的uri,因此apache无法重定向到https
有没有办法强制ui-router(或一般角度)强制状态使用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]
Run Code Online (Sandbox Code Playgroud)
第二组规则是为我们的应用程序强制执行html5mode.
RewriteCond %{REQUEST_FILENAME} !-f就位,以便angular可以获取状态的支付模板,而无需SSL.这个可以吗?
小智 36
我有一个类似的问题,虽然在SPA应用程序中使用$ routeProvider.我所做的是在控制器内强制执行重定向:
var forceSSL = function () {
if ($location.protocol() !== 'https') {
$window.location.href = $location.absUrl().replace('http', 'https');
}
};
forceSSL();
Run Code Online (Sandbox Code Playgroud)
这虽然重新加载所有资源.但是,这种情况仅在切换到SSL模式时发生一次.
注意,该函数实际上是在服务中,因此可以从任何地方调用.
我希望这有帮助.