我想使用HTTP Basic Auth限制特定路径的访问权限,以便访问/ www / private的人将通过身份验证而不是/ www / public,/ www / public / dashboard,.... / p>
注意:“私人”,“公开”,“仪表板”等不是文件夹,但是网址重写
我当前的webconfig:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$" ignoreCase="false" negate="true" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
<location path="mysite/www/private">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<basicAuthentication enabled="true" />
<windowsAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
<location path="mysite/www">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<basicAuthentication enabled="false" />
<windowsAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
然而,这不起作用 - 它从不提示授权
答案 0 :(得分:0)
IIS URLRewrite模块在身份验证启动之前重写请求,因此使用当前的重写规则,这是不可能的。
来自here
的例外情况URL Rewrite模块是一个插入的本机代码模块 请求处理管道在预开始请求或开始请求 阶段,然后使用一组来评估请求的URL路径 重写规则。每个重写规则分析URL路径,如果全部,则分析 满足规则条件,将原始路径更改为新路径。 在评估完所有规则之后,URL Rewrite模块 生成最终的URL路径,通过该路径用于请求 IIS管道处理的其余部分。这意味着处理程序 IIS管道中的选择是基于重写的URL 由URL Rewrite模块生成。
您的重写规则是这样一种方式,它将任何不是静态文件的路径重写为index.php。其余的IIS管道将路径视为index.php。你必须在index.php.Or中实现你的身份验证,你可以轻松编写一个简单的IIS模块,这个SO question讨论它。您必须添加更多逻辑来检查URL(如果包含www / private)并发送401等。