直接访问URL或刷新页面出现404错误,如何配置.htaccess解决?
解决SPA路由刷新404 + 强制www的.htaccess配置
我来帮你整合这两个规则,完美解决刷新深层URL出现404的问题。你的场景应该是单页应用(SPA),这类应用需要让服务器把所有非静态资源的请求都转发到index.html,同时保留强制使用www的规则,具体配置如下:
完整的.htaccess配置
RewriteEngine on # 强制跳转到www域名 RewriteCond %{HTTP_HOST} ^shadyab.com [NC] RewriteRule ^(.*)$ http://www.shadyab.com/$1 [L,R=301,NC] # 排除静态资源、真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif)$ [NC] # 将所有符合条件的请求转发到index.html RewriteRule ^ /index.html [L]
配置说明
- 强制www规则:这部分和你原来的配置一致,会把所有非www开头的请求301重定向到www.shadyab.com,确保域名统一。
- 排除条件:
RewriteCond %{REQUEST_FILENAME} !-f:如果请求的是真实存在的文件(比如某个.css文件),不执行转发。RewriteCond %{REQUEST_FILENAME} !-d:如果请求的是真实存在的目录,不执行转发。- 加上你原来的静态资源后缀排除,确保所有静态资源都能直接访问,不会被转发到index.html。
- 转发到index.html:当请求既不是真实文件/目录,也不是静态资源时,就把请求转发到
index.html,这样你的前端路由就能接管处理,刷新深层URL时就不会出现404了。
关于是否可以不用RewriteRule ^ /index.html [L]
其实是不行的。因为服务器会把http://www.shadyab.com/offers/Restaurant-shams-o-emare-Off这类URL当成物理路径去查找对应的文件或目录,找不到就返回404。必须通过这个RewriteRule告诉服务器,把这类请求转发到index.html,让前端路由来解析处理。不过你可以调整规则的写法(比如用RewriteRule ^(.*)$ /index.html [L]),但核心的转发逻辑是必不可少的。
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

