【问题标题】:Make AngularJS evaluate all routes except those from "/pages/"让 AngularJS 评估除“/pages/”中的所有路由之外的所有路由
【发布时间】:2014-10-09 14:23:37
【问题描述】:

我的 HTML5 模式网站有一个 404 状态,除了来自 /pages/ 的任何内容之外,我想启用它,因为它们是从服务器端 CMS -Mezzanine- 提供的。有什么想法吗?

$stateProvider
    .state('app.404', {
      url: '*path',
      views: { 'main': { templateUrl: '/static/app/views/404.html' } }
    })

【问题讨论】:

  • this question.的可能重复
  • @threeve 不完全是。问题不在于锚点,而是实际登陆这些 /pages。
  • 试试 url: '/pages/:pages'

标签: angularjs angularjs-routing


【解决方案1】:

如果我理解正确,那么我认为这需要在服务器端进行处理。我做过类似的事情,我只有几个要在服务器上呈现的 url,而所有其他 url 都指向基本上相当于 index.html 的内容,这是我的 Angular 应用程序所在的位置。

这可能很棘手,因为您的静态资源显然需要在这些参数之外提供。

在不知道服务器上的堆栈是什么的情况下,我只能建议我使用的技术,即让我的 Angular 应用程序位于 '/',但让 Angular 应用程序中的所有路由使用相同的前缀 (在我的情况下'/manage/*'

然后,在服务器端,/manage/* 被重定向到 index.html,其他所有内容都照常提供。

类似且更容易出错的解决方案可能会尝试重定向所有内容,但您希望正常提供的资源除外。对于 Apache,.htaccess 可能看起来像这样:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^js|css|img|templates|static|pages
RewriteRule .* index.html

我说它容易出错只是因为如果您要从您的域中提供任何其他资源,您需要确保并保持更新,或者至少确保您记住调试时所做的事情。

【讨论】:

  • 必须“管理”你所有的网址似乎有点烦人,我通常会做相反的事情,所以为 /assets/* 设置一个忽略模式并将所有需要提供的资产作为来自下面的服务器,如果我有一组休息服务,我将它们放在 /api/*... 下,最后在所有其他路由之后,我将 * 路由到 index.html... 因为它最后评估了这个,所以它有效完美。而且我相信大多数路由系统都是这样工作的。
猜你喜欢
  • 1970-01-01
  • 2013-10-19
  • 2020-12-29
  • 1970-01-01
  • 2020-07-23
  • 2014-07-31
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多