如何用.htaccess强制域名带www?资源加载失败问题求助
解决.htaccess强制www后网站资源无法加载的问题
嘿,我一眼就瞅出问题所在了——你最后那条RewriteRule ^ /index.html [L]规则太“一刀切”了!它会匹配所有请求,不管你是访问页面,还是请求css、js、图片这类资源,都会被强制重写到index.html。浏览器拿到的是HTML内容,自然没法解析成样式或脚本,资源加载失败也就不奇怪了。
修正后的.htaccess配置
只需要给最后那条规则加上几个过滤条件,排除真实存在的资源文件/目录即可:
RewriteEngine on # 强制所有请求跳转到www域名 RewriteCond %{HTTP_HOST} ^shadyab.com [NC] RewriteRule ^(.*)$ http://www.shadyab.com/$1 [L,R=301,NC] # 以下条件确保只有访问不存在的路径时,才重写到index.html RewriteCond %{REQUEST_FILENAME} !-f # 不是实际存在的文件(比如css/js/png) RewriteCond %{REQUEST_FILENAME} !-d # 不是实际存在的目录 RewriteCond %{REQUEST_FILENAME} !-l # 不是符号链接 # 仅当上述条件都满足时,才重定向到index.html(适配单页应用路由) RewriteRule ^ /index.html [L]
关键说明
- 新增的三个
RewriteCond是核心:它们会跳过对真实存在的资源的重写,让css、js、图片这些文件能正常被浏览器请求到。 - 测试阶段建议把
R=301改成R=302(临时重定向),确认规则生效后再改回301永久重定向,避免浏览器缓存错误的重定向规则。
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

