如何在.htaccess中将URL重写至index.html但排除现有文件/文件夹?
解决Vue Router单页应用.htaccess重写排除现有文件/目录的问题
原规则会把所有请求都导向index.html,包括实际存在的静态资源(css、js文件、图片、favicon.ico等),导致这些资源无法正常加载。你可以通过添加文件/目录存在性判断来修改规则,只有当请求的路径不是现有文件或目录时,才重定向到index.html。
修改后的完整.htaccess规则如下:
RewriteEngine On # 如果请求的不是存在的文件,跳过 RewriteCond %{REQUEST_FILENAME} !-f # 如果请求的不是存在的目录,跳过 RewriteCond %{REQUEST_FILENAME} !-d # 满足上面两个条件时,重定向到index.html RewriteRule ^ index.html [L]
规则说明:
RewriteCond %{REQUEST_FILENAME} !-f:检查当前请求的路径是否不是一个已存在的文件,!表示否定,-f代表普通文件。RewriteCond %{REQUEST_FILENAME} !-d:检查当前请求的路径是否不是一个已存在的目录,-d代表目录。- 只有当上面两个条件同时满足时,才会执行
RewriteRule,将请求导向index.html——也就是让Vue Router处理前端路由。
这样配置后,浏览器请求css/xyz.css、favicon.ico、图片等实际存在的资源时,会直接返回对应的文件;只有访问Vue Router定义的路由(比如/About、/User/123这类不存在的物理路径)时,才会加载index.html并由前端路由处理。
如果后续需要额外排除特定路径(比如API接口前缀),可以添加新的RewriteCond,比如:
# 排除以/api开头的路径 RewriteCond %{REQUEST_URI} !^/api/
内容的提问来源于stack exchange,提问作者MHSarmadi
相关产品推荐
相关产品推荐

