配置IIS重写规则实现Umbraco+Vue.js SPA路由(排除/umbraco)
解决Umbraco + Vue SPA的IIS重写规则问题
我来帮你搞定这个路由重写的问题,让Vue能完美接管Umbraco的SPA路由~ 先给你梳理下核心问题:你的原规则踩了个小坑——IIS重写模块处理的是域名后的相对路径,不需要在match url里写完整域名(http(s)://、www这些),而且还要注意排除静态资源,不然Vue打包后的js、css会加载失败。
下面是调整后的完整可用规则:
<rewrite> <rules> <!-- 优先放行Umbraco后台路径,不做重写 --> <rule name="Skip Umbraco Admin" stopProcessing="true"> <match url="^umbraco(/.*)?$" /> <action type="None" /> </rule> <!-- 所有非Umbraco、非静态资源的请求,重写到指定模板 --> <rule name="SPA Route Rewrite" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <!-- 排除真实存在的文件(比如Vue打包后的js、css、图片) --> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <!-- 排除真实存在的目录 --> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/?alttemplate=test" appendQueryString="true" /> </rule> </rules> </rewrite>
规则细节拆解:
- Skip Umbraco Admin规则:专门拦截所有以
umbraco开头的路径,匹配后直接停止后续规则处理,保证Umbraco后台能正常访问,不会被Vue路由干扰。 - SPA Route Rewrite规则:
<match url=".*" />匹配所有请求路径- 条件里的两个
negate="true"是关键:确保真实存在的静态文件和目录不会被重写,避免Vue的静态资源加载失败 - 重写动作直接指向站点根路径,并带上
alttemplate=test参数,让Umbraco渲染你指定的模板,Vue就能在这个模板里接管所有前端路由了
补充说明:
如果你的Vue项目有特定的静态资源前缀(比如/assets/),还可以在条件里再加一条排除规则,进一步精准控制:
<add input="{REQUEST_URI}" pattern="^/assets/.*$" negate="true" />
内容的提问来源于stack exchange,提问作者unnamed224
相关产品推荐
相关产品推荐

