【发布时间】:2014-05-06 12:57:57
【问题描述】:
在我们的应用程序中,我们有一个支付页面,我们希望在该页面上使用 SSL,因为我们正在处理信用卡信息。我们已经为 apache 制定了重写规则,以将到特定页面的请求重定向到 HTTPS——它负责处理对支付页面 (http://oursite.com/pay) 的任何直接请求。
然而,我们网站中的大多数导航都是通过相对 url 和 states 在 angularjs 中使用 ui-router 完成的,我们发现 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]
第二组规则是为我们的应用强制执行 html5mode。
RewriteCond %{REQUEST_FILENAME} !-f 已经到位,因此 Angular 可以在不需要 SSL 的情况下获取该州的支付模板。这样可以吗?
【问题讨论】:
-
是的,它看起来不错。
-
但我也需要一个强制 https 客户端的解决方案!
-
forcing https client-side是什么意思?你想通过 JS 而不是 .htaccess 来做到这一点? -
如果用户单击带有
ui-sref='pay'的链接,ui-router会加载模板并刷新状态——在任何时候都不会向服务器请求新的 uri,因此 apache 无法重定向到 https。重写规则涵盖人们直接访问domain.com/pay的情况,但不包括 ui-router 处理导航的情况。我需要将pay状态的ui-router 重定向到https。要么,要么将所有链接都链接到/pay绝对hrefs,我不想这样做..
标签: javascript angularjs .htaccess mod-rewrite ssl