我正在尝试使用html5mode。我这样使用:
我在'head'标签中使用'base'标记并在'/'上设置href(不能在HTML中写这个...)
我的主要模块正在处理下面的路线:
angular.module('MyChef', [
'Authentication',
'Home',
'UserArea',
'ngRoute',
'ngCookies'
])
.config(['$routeProvider', '$locationProvider', function ($routeProvider,$locationProvider) {
$routeProvider
.when('/login', {
controller: 'LoginController',
templateUrl: 'modules/authentication/views/login.html'
})
.when('/', {
controller: 'HomeController',
templateUrl: 'modules/home/views/home.html'
})
.when('/home', {
controller: 'HomeController',
templateUrl: 'modules/home/views/home.html'
})
.when('/user-area', {
controller: 'UserAreaController',
templateUrl: 'modules/user-area/views/user-area.html'
})
.otherwise({ redirectTo: '/' });
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
});
}]).run(//doesn't matter I guess...);
正如您所看到的,我正在尝试使用'requireBase'设置为'false'来忽略路径中的哈希,但是无效。
我的nginx配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/site/public;
server_name mychefake.com.br;
location / {
index index.html;
try_files $uri $uri/ =404;
}
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Port 443; #this is important for Catalyst Apps!
rewrite /api(.*) /$1 break;
proxy_pass http://localhost:5000; #changed from http://localhost:5000/
}
}
行为:
当我访问类似:http://localhost
的内容时我被重定向到'/ login'(如果我没有登录)。没关系!
但是,如果我尝试在没有“#”的情况下重新加载此页面,我的脸上就有404页面。为什么呢?
我想我需要在nginx配置文件上做一些事情(也许是重写)。我是对的还是我可以直接在AngularJS上做到这一点?
谢谢!
答案 0 :(得分:0)
这是因为当您将请求发送到服务器时,它不知道您请求的文件不存在,并且路由正在前端内进行。您必须修改.htaccess
,以便将所有请求路由到一个文件。
RewriteEngine On
Options FollowSymLinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /#/$1 [L]
答案 1 :(得分:0)
在nginx配置文件中的位置会话:
http
这个有效!但这不是最好的方式(实际上是一种愚蠢的方式)。我需要更好的解决方案。我试过条件重写,但是nginx'大喊大叫':D。还有其他人吗?