Angular用作WordPress主题时非根路由404如何重定向到index.html
你修改.htaccess不生效的核心原因是HTTPS站点的虚拟主机配置未启用.htaccess解析:你贴出的仅为80端口的HTTP配置,当前所有请求都会跳转HTTPS,而Certbot自动生成的443端口HTTPS配置默认没有开启AllowOverride All,导致.htaccess文件完全不被读取。
1. 修复HTTPS站点配置,启用.htaccess支持
首先找到HTTPS站点配置文件,通常路径为 /etc/apache2/sites-enabled/example_com-le-ssl.conf,在文件中找到<Directory "/var/www/html">配置段,修改为以下内容:
<Directory "/var/www/html"> AllowOverride All Require all granted </Directory>
然后启用rewrite模块(如果未启用),并重载Apache配置生效:
sudo a2enmod rewrite sudo systemctl reload apache2
2. 更新.htaccess重写规则
将/var/www/html/.htaccess替换为以下配置,兼顾WordPress后台/静态资源访问和Angular路由支持:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # 放行WordPress核心路径、静态文件 RewriteCond %{REQUEST_URI} ^/wp-(admin|content|includes)/ [NC,OR] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 其余所有请求转发到index.php,交由Angular处理路由 RewriteRule . /index.php [L] </IfModule>
3. 可选兜底方案(无需.htaccess)
如果你不需要用.htaccess做其他配置,可以直接在HTTPS虚拟主机配置中添加404错误页指向,所有不存在的路径都会直接交给Angular处理:
<VirtualHost *:443> # ... 其余原有配置不变 ErrorDocument 404 /index.php <Directory "/var/www/html"> AllowOverride None Require all granted </Directory> </VirtualHost>
修改后同样执行systemctl reload apache2重载配置即可。
验证效果
修改完成后用浏览器无痕模式访问非根路径,确认Angular路由可以正常加载,不会返回404即可。
内容的提问来源于stack exchange,提问作者RobinAnderssonCode
相关产品推荐
相关产品推荐

