我需要创建一个URL重写规则,将REMOTE_USER值添加到查询字符串中。我将我的应用简化为绝对必需品。但是,在评估规则条件时,REMOTE_USER始终为空。
我的网站在IIS 7中配置,应用程序池使用与.NET 2.0的集成模式。我通过IIS管理器禁用了Anonymous Auth并在网站上启用了Windows Auth,我甚至将该行添加到web.config以防止匿名访问。这是我的两个文件。
的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="?" roles="" verbs="" />
</authorization>
</security>
<rewrite>
<rules>
<clear />
<rule name="Add login into URL" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="login" negate="true" />
<add input="{REMOTE_USER}" pattern="(.*)" />
</conditions>
<action type="Redirect" url="{HTTP_URL}?login={C:1}" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
的default.asp
<%= Request.ServerVariables("REMOTE_USER") %>
我的规则永远不会命中,因为{REMOTE_USER}在评估条件时总是空白(其他服务器变量显示在规则中,所以它只是{REMOTE_USER})。扭曲是default.asp显示我的REMOTE_USER值。
为什么会这样?谢谢
答案 0 :(得分:0)
我不知道为什么我之前没有找到此链接。我怀疑,auth在URL重写规则后运行,而REMOTE_USER不能用于重定向。我想我必须编写自己的重定向模块。
答案 1 :(得分:0)
那么,你解决了这个问题吗?
显然,在某些情况下,ServerVariables已经为C#折旧了。
如果是这种情况,你需要这样做:
string login = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
如果您真的想使用ServerVariables,请记住它们在C#中是 CaSe Sensitive 。正确的套管几乎总是 UPPER ,以下是它们的列表: