我的应用是一款带有angular-translate
的多语言(angularjs
)ui-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。
答案 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 + '/';
});
似乎你需要在抽象状态中添加一个尾部斜杠,然后将其从其余部分中删除。
所以抽象状态是:url: '/:lang/'
然后,本地状态将是url: ''