我在IIS上安装了几个应用程序:
/abc
/bcd
现在,我想将转到/
的用户重定向到/abc
网站。由于root不是任何应用程序的一部分,因此我无法使用IIS重写模块,该模块使用web.config
中定义的重定向。
所以我在IIS中安装了HTTP Redirection
并启用了以下内容:
如果用户准确输入http://example.com
或http://example.com/
,则服务器会重定向到http://example.com/abc/
。
但是,如果用户输入http://example.com/abc
,服务器会将请求视为根目录中的,因此它也会应用重定向,从而导致http://example.com/abc/abc
。
我还尝试检查第一个复选框(将所有请求重定向到确切目标),但这会导致从http://example.com/abc
到http://example.com/abc
的重定向循环。
我希望那些输入example.com/abc
的用户留在那里,并将用户example.com
重定向到/abc
应用程序。我怎么能这样做?
答案 0 :(得分:3)
要修复重定向循环,您可以向目标添加尾随锚链接,例如:/abc/#
。这可以防止IIS剥离尾部斜杠并创建从http://example.com/abc
到http://example.com/abc
的重定向循环
Request URL:https://example.com/abc
Request Method:GET
Status Code:302 Redirect
Response Headers
Location:https://example.com/abc/#
Server:Microsoft-IIS/8.0
Request URL:https://example.com/abc/
Request Method:GET
Status Code:200 OK
或者,您仍然可以使用URL重写模块as discussed here,即使它适用于您的根站点而非应用程序。 {1}}文件应存在于您的Web根文件夹中(通常为web.config
)。您还可以使用IIS管理器中的URL重写UI添加入站规则:
这会将%SystemDrive%\inetpub\wwwroot
重定向到http://example.com/
。
如果用户输入http://example.com/abc/
(且该文件不存在),则不会将其重定向到http://example.com/xyz
,并且会收到/abc
,与上面的HTTP重定向模块不同。