Azure Web App Service的IIS能否仅返回带路径的HTTP重定向?
解决方案
要让IIS返回仅包含路径的Location头,不能使用URL重写模块的Redirect动作(该动作会自动补全协议和主机名),需要改用Rewrite动作配合自定义响应头来实现。
最终配置
替换原有的重定向规则为以下配置:
<rule name="Remove trailing slash" stopProcessing="true"> <match url="^(.*)/$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="{R:1}" /> <serverVariables> <set name="RESPONSE_Location" value="{R:1}" /> </serverVariables> </rule>
关键说明
- 替换
Redirect为Rewrite:Rewrite动作是在服务器内部改写请求路径,不会触发自动补全绝对URL的逻辑。 - 自定义
RESPONSE_Location头:通过设置服务器变量RESPONSE_Location,直接指定响应头的值为捕获到的路径{R:1},这样就能输出仅包含路径的Location。 - 保留原有条件:确保只对非文件、非目录的URL生效,避免破坏静态资源或目录的正常访问。
配置生效后,访问/login/会返回:
HTTP/1.1 301 Moved Permanently Location: /login
为什么之前的尝试无效
IIS URL重写模块的Redirect动作设计上会自动将相对路径转换为绝对URL(基于当前请求的协议和主机名),哪怕你硬编码url="/test",模块也会自动补全成完整的https://www.example.com/test,这是模块内置的行为,无法通过调整url参数或捕获组来改变。
内容的提问来源于stack exchange,提问作者giskard22
相关产品推荐
相关产品推荐

