在Angular.js路线上阅读了大量的报告和stackoverflow问题之后,当我进行手动刷新时,我仍然收到“未找到”错误。
步骤:
localhost
- >因为我的配置(见下文),我被带到了localhost/home
。观点和一切都很好。Not Found: the requested /home is not found on this server
这个问题可能与Refreshing page gives "Page not found"
最相似我的配置
// Routing configuration.
angular.module('myModule')
.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
// Enable pushState in routes.
$locationProvider.html5Mode(true);
$routeProvider
.when('/home', {
templates: {
layout: '/views/home.html'
},
title: 'Welcome!'
})
.when('/launchpad', {
templates: {
layout: '/views/layouts/default.html',
content: '/views/partials/profile.html'
},
title: "Launchpad"
})
.otherwise({
redirectTo: '/home'
});
}
]);
我做过的其他事情:
index.html
中,我已经拥有<base href="/">
以下是我尝试过的htaccess规则。没有用。
来自Refreshing page gives "Page not found"
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteCond %{REQUEST_URI} !.*\.(css|js|html|png) #Add extra extensions needed.
RewriteRule (.*) index.html [L]
</ifModule>
来自http://ericduran.io/2013/05/31/angular-html5Mode-with-yeoman/
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.html/#!/$1
</IfModule>
答案 0 :(得分:8)
这个.htaccess设置对我来说效果很好
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/$
RewriteRule (.*) /#!/$1 [NE,L,R=301]
</IfModule>
答案 1 :(得分:6)
我不知道这是否是最佳解决方案,但我确实找到了有效的设置组合:
hashPrefix('!')
(见下文)<base href="/">
FallbackResource /index.html
文件中的<Directory PATH_TO_WWW_FILES>
部分添加了.conf
。设置完成后,本地mod_rewrite
设置似乎无关紧要。// Routing configuration.
angular.module('myModule')
.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
// Enable pushState in routes.
$locationProvider.html5Mode(true).hashPrefix('!');
$routeProvider
.when('/home', {
templates: {
layout: '/views/home.html'
},
title: 'Welcome!'
})
.when('/launchpad', {
templates: {
layout: '/views/layouts/default.html',
content: '/views/partials/profile.html'
},
title: "Launchpad"
})
.otherwise({
redirectTo: '/home'
});
}
]);
答案 2 :(得分:1)
对于仍然面临此错误的人,无论是否有SSL:
确保您在apacheconfig中使用Allowoverride,例如
<Directory "/var/www/mysite/public_html">
AllowOverride All
</Directory>
两个端口的是使用SSL
答案 3 :(得分:1)
除了使用HTML mode
,base href="/"
,sudo a2enmod rewrite
,使用.htaccess
重写之外,我无法发表评论。从Unispaw,我必须{strong} >>您网站的可用网站和 AllowOverride All