Tuan Anh Tran Asked: 2016-08-02 19:20:51 +0800 CST2016-08-02 19:20:51 +0800 CST 2016-08-02 19:20:51 +0800 CST 是否可以仅为 1 个特定域绑定设置基本身份验证? 772 我只想为 1 个域绑定启用基本身份验证,并让其余的公共访问。IIS可以做到这一点吗? iis http-basic-authentication 1 个回答 Voted Best Answer Peter Hahndorf 2016-08-03T03:47:52+08:002016-08-03T03:47:52+08:00 网站的绑定信息用于确定将传入请求路由到哪个网站。(通过 Windows 激活服务和 http.sys)。 对于每个网站,您可以为整个站点或站点中的特定 URL 启用各种身份验证方法,但不能基于主机名。 你至少有两个选择: 选项一是使用两个独立的网站,它们指向同一个物理目录,并在站点根目录中使用同一个 web.config。 您仍然可以为这两个站点使用不同的身份验证方法。 这里的缺点是您有两组日志文件,并且对配置的某些更改也必须进行两次。 选项二涉及URL Rewrite 模块 假设您有两个主机名绑定到站点normal.serverfault.com和secure.serverfault.com. 在站点根目录下创建一个虚拟目录secure,但将其指向站点本身的同一物理目录(与根目录相同)。 对于虚拟目录,禁用anonymousAuthentication 并启用basicAuthentication。 现在向站点添加一个重写规则: <rewrite> <rules> <rule name="Secure"> <match url=".*" /> <conditions> <add input="{SERVER_NAME}" pattern="^secure\.serverfault\.com$" /> </conditions> <action type="Rewrite" url="/secure/{R:0}" /> </rule> </rules> </rewrite> 我们正在重写所有使用secure虚拟目录的请求,但前提是主机名是secure.serverfault.com 现在使用normal.serverfault.com的用户仍然可以在没有身份验证的情况下访问该站点,但是使用时secure.serverfault.com他们必须登录。 我在此选项中看到的一个问题是,web.config对于重新编写的请求,您站点的根目录中的文件基本上被处理了两次。 尽管它在物理上只存在一次,但在其中执行请求时,\secure\它曾经被视为虚拟目录的本地目录,而再次被视为父目录。所以你必须确保你没有任何不支持这个的设置。例如<add...节点不能被复制,你必须使用<clear...or<remove...来解决这个问题。或者,您将设置移动到 ApplicationHost.config。 您应该使用此设置测试您的站点,但因为浏览器永远不知道 URL 已被重写,所以它应该可以正常工作。
网站的绑定信息用于确定将传入请求路由到哪个网站。(通过 Windows 激活服务和 http.sys)。
对于每个网站,您可以为整个站点或站点中的特定 URL 启用各种身份验证方法,但不能基于主机名。
你至少有两个选择:
选项一是使用两个独立的网站,它们指向同一个物理目录,并在站点根目录中使用同一个 web.config。
您仍然可以为这两个站点使用不同的身份验证方法。
这里的缺点是您有两组日志文件,并且对配置的某些更改也必须进行两次。
选项二涉及URL Rewrite 模块
假设您有两个主机名绑定到站点
normal.serverfault.com
和secure.serverfault.com
.在站点根目录下创建一个虚拟目录
secure
,但将其指向站点本身的同一物理目录(与根目录相同)。对于虚拟目录,禁用anonymousAuthentication 并启用basicAuthentication。
现在向站点添加一个重写规则:
我们正在重写所有使用
secure
虚拟目录的请求,但前提是主机名是secure.serverfault.com
现在使用
normal.serverfault.com
的用户仍然可以在没有身份验证的情况下访问该站点,但是使用时secure.serverfault.com
他们必须登录。我在此选项中看到的一个问题是,
web.config
对于重新编写的请求,您站点的根目录中的文件基本上被处理了两次。尽管它在物理上只存在一次,但在其中执行请求时,
\secure\
它曾经被视为虚拟目录的本地目录,而再次被视为父目录。所以你必须确保你没有任何不支持这个的设置。例如<add...
节点不能被复制,你必须使用<clear...
or<remove...
来解决这个问题。或者,您将设置移动到 ApplicationHost.config。您应该使用此设置测试您的站点,但因为浏览器永远不知道 URL 已被重写,所以它应该可以正常工作。