AngularJS开启html5Mode后Apache .htaccess重写规则无效求助
解决Angular 1.5.7 HTML5模式下Apache页面刷新404的问题
我懂这种配置半天没效果的烦躁!之前我在Angular 1.x配HTML5模式时也踩过一堆坑,结合你的Mac+Apache环境,咱们一步步来排查解决:
先搞定Apache的核心配置(这是很多人忽略的关键)
.htaccess规则不生效,大概率是Apache本身的配置没开对,先把这两步做好:
1. 开启mod_rewrite模块
Mac自带的Apache默认是关闭rewrite模块的,打开终端执行:
sudo nano /etc/apache2/httpd.conf
找到这一行:
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
去掉前面的#注释符,保存退出(按Ctrl+O回车,再Ctrl+X),然后重启Apache:
sudo apachectl restart
2. 允许.htaccess生效
同样在httpd.conf里找到你的项目目录对应的<Directory>块(比如默认的/Library/WebServer/Documents,或者你自己的项目路径),把AllowOverride None改成AllowOverride All,示例:
<Directory "/Users/你的用户名/Projects/你的Angular项目根目录"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
改完再重启Apache:sudo apachectl restart
用这个靠谱的.htaccess规则
把下面的内容放到你Angular项目根目录的.htaccess文件里(注意文件名前面有个点,Mac下默认隐藏,按Cmd+Shift+.可以显示隐藏文件):
RewriteEngine On # 如果请求的是真实存在的文件/目录,直接放行 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 所有其他请求都重定向到index.html,让Angular处理路由 RewriteRule ^ /index.html [L]
额外注意点
- 你提到的
SimpleHttpServer是Python的静态服务器,它不支持.htaccess规则!要测试HTML5模式,必须用Apache或者其他支持rewrite的服务器,别在SimpleHttpServer上浪费时间了。 - 确认你的Angular配置没写错:
如果还是有问题,可以试试把angular.module('你的项目模块名', []) .config(['$locationProvider', function($locationProvider) { $locationProvider.html5Mode({ enabled: true, requireBase: false }); }]);requireBase改成true,同时在index.html的<head>里加一行<base href="/">,有时候这能解决一些路由跳转的小问题。
配置完后重启Apache,刷新路由页面试试,应该就能正常访问了!
内容的提问来源于stack exchange,提问作者combi35
相关产品推荐
相关产品推荐

