【问题标题】:routes for sub domains with AngularJS使用 AngularJS 的子域路由
【发布时间】:2013-06-02 08:13:36
【问题描述】:

仅使用 AngularJS 是否可以检测子域并相应地进行路由?

假设子域 spicy.example.com 指向与 example.com

相同的 docRoot

example.com 有一个 index.html,其中住着 <div ng-view></div>

在我的配置中,我定义了部分路由:
$routeProvider.when('/food', {templateUrl: 'views/example.com/regular.html'});

但是如果 spicey.example.com 想要用自己的 regular.html 部分覆盖它呢?
$routeProvider.when('/food', {templateUrl: 'views/spicy.example.com/hot.html'});

如果不在像 Apache/Nginx 这样的服务器上使用重写规则,这可能吗?

注意:
这是一个单页应用
$locationProvider.html5Mode(true);

我正在使用 CORS:
$http.defaults.useXDomain = true;

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    不,这是不可能的,因为Same origin policy

    请记住,同源政策适用于包含的资源 (例如 ngInclude 不适用于所有浏览器上的跨域请求 以及某些浏览器上的 file:// 访问)。

    http://docs.angularjs.org/api/ng.directive:ngInclude

    【讨论】:

    • 我不确定 SOP 与它有什么关系。如果我在 spicy.example.com 并且我正在从 example.com/views/spicy.example.com/ 请求资源,我不是在发出跨源请求来执行操作,我只是在请求资源。
    • 你应该有相同的主机、相同的端口和相同的协议来发出请求。在这种情况下,您违反了主机规则。所以它是跨源请求。
    • 我想我们可能在谈论不同的事情。以与 js 资产相同的方式考虑部分。当然,您可以像获取部分内容一样从 CDN 获取 jquery。
    • 我忘了说这是一个使用 pushState 的单页应用。
    • 你使用 html 中的
    【解决方案2】:

    CORS 似乎是要走的路。

    您可以通过 NGINX/Node.js 将请求代理传递给文件并启用 CORS,或者您可以使用 CDN 来提供启用了 CORS 的资产,例如 Amazon Cloud S3。

    如果 sumdoamins 指向同一个文档根目录,则访问:

    example.com/views/home.html
    

    与访问没有什么不同:

    test.example.com/views/home.html
    

    【讨论】:

      猜你喜欢
      • 2014-04-24
      • 2011-10-20
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2014-02-26
      • 2021-07-01
      相关资源
      最近更新 更多