从angularjs + ui-router获取.htaccess的Param

时间:2017-11-12 22:35:20

标签: angularjs .htaccess angular-ui-router

我的应用是一款带有angular-translate的多语言(angularjsui-router应用。我在从.htaccess重定向获取参数时遇到问题。

我想要的是以下路由。

  • www.example.com/en =英文版。
  • www.example.com/he =希伯来语版本。
  • www.example.com/ar =阿拉伯语版本。
  • 重定向到英文版的其他内容。

在客户端

我的app.config看起来像这样:

  

语言状态

$stateProvider.state('app', {
    abstract: true,
    url: '/:lang',
    template: '<sh-app/>',
    controller: function ($translate, $state, $rootScope) {
        $translate.use($state.params.lang);

        if (/he|ar/.test($state.params.lang)) {
            $rootScope.dir = 'rtl';
        }
    }
});
  

Home State

$stateProvider.state('app.home', {
    url: '/',
    template: '<sh-main/>'
});
  

当然要删除hashbang

$locationProvider.html5Mode(true);

现在到服务器端。

我添加了一个.htaccess文件,其中包含以下内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /7for70/index.html [L]
</IfModule>

问题在于,如果我尝试导航到www.example.com/ar,只需重定向到www.example.com/en/$stateParams.lang === 'en'

如何将网址的结尾转发给ui-router。

1 个答案:

答案 0 :(得分:0)

对于那些最终遇到同样问题的人来说,经过两天的撕裂,我有了一个主意。

我在我的网址上添加了一个尾随斜杠:

  • www.example.com/en => www.example.com/en/
  • www.example.com/he => www.example.com/he/
  • www.example.com/ar => www.example.com/ar/

和中提琴,它有效!

从那里可以很容易地找到ui-router docs中的解决方案来处理尾随斜杠。

  

对于旧版本的ui-router,请将此代码段添加到模块的配置功能中。它在$ urlRouterProvider上创建一个规则,该规则将所有缺少尾部斜杠的URL映射到同一个URL,但附加了尾部斜杠。

$urlRouterProvider.rule(function ($injector, $location) {
    var path = $location.url();

    // check to see if the path already has a slash where it should be
    if (path[path.length - 1] === '/' || path.indexOf('/?') > -1) {
        return;
    }

    if (path.indexOf('?') > -1) {
        return path.replace('?', '/?');
    }

    return path + '/';
});

编辑:(约20分钟后)

似乎你需要在抽象状态中添加一个尾部斜杠,然后将其从其余部分中删除。

所以抽象状态是:url: '/:lang/'
然后,本地状态将是url: ''