我有一个使用 301 重定向响应的重写规则,但我不知道为什么。
我在 WinHost 共享主机上,使用 IIS 7 重写从我的帐户的子文件夹托管我拥有的另一个域。
默认情况下,WinHost 会将您的其他域名指向您帐户的根目录。所以我的目标有两个:
- 我想将这些其他域文件物理地分开保存在子文件夹中
- 我想从地址栏隐藏所述子文件夹
以便:
http://myotherdomain.com
服务来源:
E:\account_root\myotherdomain
因此,我使用 IIS 7 重写模块生成了此规则。
<xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Test" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="(^|\.)myotherdomain\.com$" />
</conditions>
<action type="Rewrite" url="myotherdomain/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我想要将请求myotherdomain.com
偏移到myotherdomain
子文件夹中。
这是可行的,但前提是请求中没有路径。如果我请求,http://myotherdomain.com
我会收到 200 响应,并且在我的浏览器中,我会看到位于 的默认文档E:\account_root\myotherdomain
。没有发生重定向。
如果您向请求添加路径,例如http://myotherdomain.com/test
,现在我会收到到重写 URL 的 301 重定向:
Response: HTTP/1.1 301 Moved Permanently
Location: http://myotherdomain.com/myotherdomain/test/
然后浏览器会获取:
Request: GET /myotherdomain/test/ HTTP/1.1
然后,重写规则再次在 IIS 上运行,最终 IIS 尝试提供位于以下位置的默认文档:
E:\account_root\myotherdomain\myotherdomain\test
不存在的:
Response: HTTP/1.1 404 Not Found
因此重写本身似乎有效;我不明白的是为什么 IIS 会将 301 重定向混入其中,但只有当请求中存在路径时才会这样做。
答案1
难道不是重定向以添加尾随的 / 吗?