AngularJS ui-router html5mode无法重载

时间:2016-01-26 17:17:35

标签: angularjs html5 angular-ui-router

首先,我尝试了一些不同的解决方案来解决这个问题,但它们都没有为我工作。请参阅以下链接。

问题:

目前我无法将html5mode与ui-router一起使用,因为它有Not Found错误。它加载页面的唯一时间是第一次加载。每次刷新或尝试访问特定URL时,都会出现此错误:

  

在此服务器上找不到请求的URL /欢迎。

我的代码

目前,我正在AngularJS 1.5.0使用ui-router 0.2.15注意:我在apache服务器中使用的空白应用程序只有2个主要状态和1个带有子状态的主状态。

HTML:

<head>
    <meta charset="UTF-8" />
    <base href="/"></base>
</head>

的.config:

$locationProvider.html5Mode(true);

服务器重写:

<ifModule mod_rewrite.c>
    RewriteEngine on

    # Don't rewrite files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    RewriteRule ^ index.html [L]
</ifModule>

我尝试了什么

我正在寻找解决此问题的很多主题/问题。所有这些都指出了3种可能的解决方案:

  • 使用base代码;
  • 在服务器端重写条件;
  • 不使用base标签(很难找到,但有一些);

我尝试了所有这些,遵循这些链接(以及更多):

和其他链接..但它们都不起作用,总是相同的结果。当我得到一个不同的错误时,就是这个错误:

  

内部服务器错误   服务器遇到内部错误或配置错误,无法完成您的请求。

     

请与admin @ localhost上的服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。

     

服务器错误日志中可能提供了有关此错误的更多信息。

当我尝试使用这样的重写规则时:

<Directory />
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    RewriteRule ^ index.html [L]
</Directory>

编辑:

经过一些评论后,我设法让它发挥作用,但仅限于主要状态。当我处于子(嵌套)状态,并尝试刷新页面时,我收到此错误:

  

未捕获的SyntaxError:意外的标记&lt;

     

未捕获的ReferenceError:未定义角度

     

资源解释为样式表,但使用MIME类型text / html传输:

我的州的例子:

.state('contact', {
    parent:'app',
    url:'/Contact',
    views: {
        'app': {
            templateUrl: 'app/contact.html',
        }
    }
})
.state('service', {
    parent:'app',
    abstract: true,
    url:'/Service',
    views: {
        'app': {
            templateUrl: 'app/service.html',
        }
    }
})
    .state('service-teste', {
        parent:'service',
        url:'/Test',
        views: {
            'service': {
                templateUrl: 'app/service_test.html',
            }
        }
    })

当我处于service-test状态并刷新页面时,我收到了错误。

1 个答案:

答案 0 :(得分:1)

我解决此问题的方法是更改​​.htaccess文件以及index.html上的某些设置,更改某些路径。

的.htaccess

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

请注意,必须在我的apache服务器上启用mod_rewrite。默认情况下,它已被禁用。

的index.html

我必须更改css文件的路径,并在开始时添加/。像这样:

<link rel="stylesheet" type="text/css" href="/dist/css/main.min.css">

我像往常一样保留其他配置。

$locationProvider.html5Mode(true); //In the router config file
<base href="/"> //On the index.html just before closing the head tag