Angular 4无法在生产环境在线服务器部署,已尝试多种方案仍未解决
我明白这种卡壳的感觉——明明按官方文档和各种教程配置了mod_rewrite,却死活没效果,确实让人头疼。既然你已经确认mod_rewrite模块启用,那咱们从以下几个容易忽略的点逐一排查:
确认.htaccess的位置与权限
首先要确保.htaccess文件放在网站的根目录(和你的应用入口文件比如index.php同层级),不是随便某个子目录里。另外检查文件权限:至少要设置为644,保证Apache服务器的运行用户(比如www-data)能读取这个文件。验证Apache是否允许.htoverride
这是很多人踩坑的点:即使mod_rewrite开了,如果Apache不让.htaccess覆盖配置,规则也不会生效。
打开你的站点配置文件(比如Ubuntu下的/etc/apache2/sites-available/your-site.conf),找到对应站点的<Directory>区块,确保AllowOverride设置为All:<Directory /var/www/your-site-root-path> AllowOverride All Require all granted </Directory>修改后别忘了重启Apache:
sudo systemctl restart apache2(Debian/Ubuntu)或者sudo service httpd restart(CentOS/RHEL)。检查官方配置是否完整
你贴的官方配置看起来被截断了,完整的单页应用rewrite配置应该是这样的(以转发到index.php为例),先确认你用的是完整版本:RewriteEngine On # 如果请求的是已存在的文件或目录,直接访问 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] # 如果请求的资源不存在,转发到入口文件 RewriteRule ^ /index.php [L]要是最后一行转发规则没配置对,自然不会有预期的效果。
开启rewrite日志精准定位问题
如果上面的步骤都没解决,就用Apache的rewrite日志来抓细节——这是排查这类问题的终极手段。
在Apache的全局配置或站点配置里添加:LogLevel alert rewrite:trace3重启Apache后,查看对应的错误日志(比如
/var/log/apache2/error.log),里面会详细记录每个请求的rewrite规则匹配过程,能直接告诉你哪一步出了问题。用极简规则测试基础功能
先排除复杂规则的干扰,写一个最简单的测试规则:RewriteEngine On RewriteRule ^test-page$ /index.php?debug=1 [L]然后访问你的域名+
/test-page,看是否能正常跳转到index.php并获取到debug=1的参数。如果这个测试都不生效,那大概率还是Apache的全局配置问题;如果生效,说明之前的规则逻辑有漏洞,可以针对性调整。
内容的提问来源于stack exchange,提问作者Black Mamba

