Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从angularjs+;中的.htaccess获取参数;用户界面路由器_Angularjs_.htaccess_Angular Ui Router - Fatal编程技术网

从angularjs+;中的.htaccess获取参数;用户界面路由器

从angularjs+;中的.htaccess获取参数;用户界面路由器,angularjs,.htaccess,angular-ui-router,Angularjs,.htaccess,Angular Ui Router,我的应用程序是一个多语言(angular translate)angularjs应用程序,带有ui路由器。从.htaccess重定向获取参数时遇到问题 我想要的是下面的路由。 www.example.com/en=英文版 www.example.com/he=希伯来文版本 www.example.com/ar=阿拉伯语版本 其他任何内容都已重定向到英文版本 在客户端 我的app.config如下所示: 语言状态 现在转到服务器端。 我添加了一个.htaccess文件,其中包含以下内容: &l

我的应用程序是一个多语言(
angular translate
angularjs
应用程序,带有
ui路由器
。从
.htaccess
重定向获取参数时遇到问题

我想要的是下面的路由。
  • www.example.com/en
    =英文版
  • www.example.com/he
    =希伯来文版本
  • www.example.com/ar
    =阿拉伯语版本
  • 其他任何内容都已重定向到英文版本
在客户端 我的
app.config
如下所示:

语言状态

现在转到服务器端。 我添加了一个
.htaccess
文件,其中包含以下内容:

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

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/7for70/index.html[L]
问题是,如果我尝试导航到
www.example.com/ar
,它只会重定向到
www.example.com/en/
$stateParams.lang==='en'


如何将url的结尾转发到ui路由器。

对于任何最终遇到相同问题的人,在两天的撕扯后,我有了一个想法

我在url后面加了一个斜杠,如下所示:

  • 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路由器,请将此代码段添加到模块的配置函数中。它在$urlRouterProvider上创建一条规则,将缺少尾随斜杠的所有url映射到同一url,但附加了尾随斜杠


编辑:(约20分钟后) 似乎您需要在抽象状态中添加一个尾随斜杠,然后将其从其余状态中删除

因此,抽象状态是:
url:'/:lang/'


然后主状态将是
url:“

@Edison有趣的文章,但不能解决我的问题。在我的语言状态下,我专门在url路径中定义参数。
$stateProvider.state('app.home', {
    url: '/',
    template: '<sh-main/>'
});
$locationProvider.html5Mode(true);
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /7for70/index.html [L]
</IfModule>
$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 + '/';
});