Angularjs 使用查询字符串在新服务器上重定向的角度路由

Angularjs 使用查询字符串在新服务器上重定向的角度路由,angularjs,angularjs-directive,angular-ui-router,angularjs-scope,angularjs-routing,Angularjs,Angularjs Directive,Angular Ui Router,Angularjs Scope,Angularjs Routing,有人能帮助我理解如何用和旧URL相同的查询字符串参数将角度状态重定向到新URL吗 示例 如果我的角度应用程序已打开http://example.com,然后将所有请求发送到http://example.com/dashboard?id=123&view=test应重定向到http://test.com/dashboard?id=123&view=test 我应该如何使用以下代码定义我的状态 .state('dashboard', { url: 'domain.com/dashboard

有人能帮助我理解如何用和旧URL相同的查询字符串参数将角度状态重定向到新URL吗

示例

如果我的角度应用程序已打开
http://example.com
,然后将所有请求发送到
http://example.com/dashboard?id=123&view=test
应重定向到
http://test.com/dashboard?id=123&view=test

我应该如何使用以下代码定义我的状态

.state('dashboard', { 
    url: 'domain.com/dashboard', 
    controller: 'DashboardCtrl' 
})

我知道一些将状态转移到控制器然后从那里处理的技巧。但我想知道是否有一种方法可以通过路由器重定向它,从而避免不同控制器中的重复代码?

我认为最好的解决方案不是Angular(代码加载后在浏览器中运行),而是在服务器上。如果您使用的是Apache,请添加一条
.htaccess
规则,该规则将
example.com
的所有请求重定向到
test.com

创建名为
.htaccess
的文件,并将其放置在应用程序根目录中:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://test.com/$1 [R=302,L]
如果您希望重定向是永久性的(这意味着浏览器和搜索引擎会记住并且不会麻烦去旧域),请将
302
更改为
301


如果这不是一个解决方案,您可以使用来指示应该在加载路由之前运行的代码。将其添加到基本路由的路由配置中,此代码将始终在组件等之前运行。。。已初始化。在其中,您可以读取当前路由并使用标准JavaScript将用户重定向到新域。

我认为最好的解决方案不是Angular(在加载代码后在浏览器中运行),而是在服务器上。如果您使用的是Apache,请添加一条
.htaccess
规则,该规则将
example.com
的所有请求重定向到
test.com

创建名为
.htaccess
的文件,并将其放置在应用程序根目录中:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://test.com/$1 [R=302,L]
如果您希望重定向是永久性的(这意味着浏览器和搜索引擎会记住并且不会麻烦去旧域),请将
302
更改为
301

如果这不是一个解决方案,您可以使用来指示应该在加载路由之前运行的代码。将其添加到基本路由的路由配置中,此代码将始终在组件等之前运行。。。已初始化。在其中,您可以读取当前路由,并使用标准JavaScript将用户重定向到新域

A.角度1

1。main.route.js:

.state('stateName', {
  url: 'dashboard',
  controller: ['$location', '$window', function ($location, $window) {
    var url = 'domainB.com';
    url += $location.$$url;
    $window.location.href = url;
  }]
})
B.角2/4

1。app.module.ts:声明自定义提供程序,如:

@NgModule({
  providers: [
    {
      provide: 'externalUrlResolver',
      useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
        window.location.href = `${route.data.externalUrl}${state.url}`;
      }
    }
  ]
})
2。app routing.module.ts:现在使用自定义提供程序,我们可以从外部重定向

const APP_ROUTES: Routes = [
  { path: 'dashboard', component: AnyComponent,
    pathMatch: 'prefix',
    resolve: { url: 'externalUrlResolver' },
    data: { externalUrl: 'domainB.com'}
  }
]
输入

这将被重定向到:

.state('stateName', {
  url: 'dashboard',
  controller: ['$location', '$window', function ($location, $window) {
    var url = 'domainB.com';
    url += $location.$$url;
    $window.location.href = url;
  }]
})

A.角度1

1。main.route.js:

.state('stateName', {
  url: 'dashboard',
  controller: ['$location', '$window', function ($location, $window) {
    var url = 'domainB.com';
    url += $location.$$url;
    $window.location.href = url;
  }]
})
B.角2/4

1。app.module.ts:声明自定义提供程序,如:

@NgModule({
  providers: [
    {
      provide: 'externalUrlResolver',
      useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
        window.location.href = `${route.data.externalUrl}${state.url}`;
      }
    }
  ]
})
2。app routing.module.ts:现在使用自定义提供程序,我们可以从外部重定向

const APP_ROUTES: Routes = [
  { path: 'dashboard', component: AnyComponent,
    pathMatch: 'prefix',
    resolve: { url: 'externalUrlResolver' },
    data: { externalUrl: 'domainB.com'}
  }
]
输入

这将被重定向到:

.state('stateName', {
  url: 'dashboard',
  controller: ['$location', '$window', function ($location, $window) {
    var url = 'domainB.com';
    url += $location.$$url;
    $window.location.href = url;
  }]
})


我知道这个服务器级设置,但我们的应用程序现在在集群上,需要应用程序级路由。服务器只是一个无头垃圾。@NitinKumar我已经用另一个想法更新了我的答案。我正在寻找@khichar.anil上面建议的答案。谢谢你的回答。如果有人寻求与我不同的服务器级处理,也将放弃投票。我知道此服务器级设置,但我们的应用程序现在位于群集上,需要应用程序级路由。服务器只是一个无头垃圾。@NitinKumar我已经用另一个想法更新了我的答案。我正在寻找@khichar.anil上面建议的答案。谢谢你的回答。如果有人希望得到与我不同的服务器级处理,请放弃投票。谢谢@khichar.anil。这管用!接受您的回答。谢谢@khichar.anil。这管用!我接受了你的回答。