如何在 web.config 中指定根 (/) 位置?
Posted
技术标签:
【中文标题】如何在 web.config 中指定根 (/) 位置?【英文标题】:How to specify root (/) location in web.config? 【发布时间】:2012-03-10 14:37:08 【问题描述】:如何在 web.config 中指定根位置以允许未经身份验证的用户访问它?
根位置由 default.aspx 提供,但用户通常看不到 default.aspx,他们只看到http://mysite.com/
。
所以我添加了
<location path="~/default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
如果用户点击mysite.com/default.aspx
,这有效,但如果用户点击mysite.com/
- 他仍然被重定向到登录页面。
我试过<location path="~">
(没有帮助)和<location path="~/">
、<location path="">
(网站完全失败)但无法正常工作。
有什么想法吗?
【问题讨论】:
他们至少可以访问 url:http://mysite.com/default.aspx
吗?
为什么不使用 IIRF 通过编写重写和重定向规则将用户从 default.aspx 重定向。?
您能发布所有与身份验证相关的 web.config 代码吗?我假设您拒绝用户的地方更多,您可以在其中定义登录位置。我想查看所有内容,并按照您在 web.config 中指定的顺序进行
在下面寻找 lulhuh 答案 - 它在完全相同的情况下帮助了我(如果它也对你有帮助,请标记为答案)。
lulhuh
的回答应该是接受的答案***.com/a/19154854/481207
【参考方案1】:
如果你只想让未经身份验证的用户访问default.aspx,你可以使用
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
在<system.web>
之前并将该页面设置为您的网络服务器中的默认页面。
在 Visual Studio 中,您可以选择页面和“设置为起始页”。
如果您想允许访问根目录中的所有文件,您必须创建文件夹,放置您需要由经过身份验证的用户访问的页面。
您可以创建一个 Secure 文件夹,您可以在其中放置所有受保护的页面并以这种方式更改您的 web.config:
<location path="Secure">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
删除
<authorization>
<deny users="?"/>
</authorization>
【讨论】:
这正是我在问题中发布的配置,正如我所指出的 - 它不起作用。对根目录 (mysite.com/) 的请求的处理方式与对 mysite.com/default.aspx 的请求不同 - default.aspx 的规则不适用【参考方案2】:如果要指定目录的根目录,请使用<location path="" >
【讨论】:
【参考方案3】:你可以通过2种方法来实现
方法一:
如果任何用户直接访问您的站点,您可以在 IIS 中将重定向路径设置为http://mysite.com/default.aspx。在 IIS7 中,您可以通过单击默认文档来实现。附上图片供大家参考
方法二
您可以通过此 URL ASp.NET Membership 来设置您的网络配置设置。
如果您需要更多详细信息,请告诉我。
【讨论】:
【参考方案4】:我们过去的做法是为所有需要登录的功能创建一个文件夹,并为该文件夹设置 require auth。所有aspx都转到该文件夹。该站点的根目录保持打开状态。
【讨论】:
好吧,我们的情况正好相反,我们只有少数不需要身份验证的页面。现在用你的方法真的没有意义。【参考方案5】:您可能使用了表单身份验证,不是吗?
<authentication mode="Forms">
<forms loginUrl="~/Default.aspx" />
</authentication>
这将解决您的问题。另一种选择是:
<location path="~/Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
【讨论】:
授权不会发生在主页上,我有一个单独的用户登录表单,所以第一个建议在我的情况下不起作用。我有类似于您发布的location
指令,但它没有帮助。 example.com/MainPage.aspx 有效,而 example.com 无效。【参考方案6】:
要指定根目录,您必须将其设置在位置块之外。
<configuration>
<system.web>
<authorization>
<allow users=“*“/>
</authorization>
</system.web>
</configuration>
然后使用位置块保护您的其他文件夹
<location path=“AccessDenied.aspx“>
<system.web>
<authorization>
<deny users=“?“/>
</authorization>
</system.web>
</location>
【讨论】:
【参考方案7】:试试这个:
<system.web>
<urlMappings enabled="true">
<add url="~/" mappedUrl="~/default.aspx" />
</urlMappings>
<authorization>
<allow roles="admin"/>
<deny users="*" />
</authorization>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
【讨论】:
路径可以是文件夹吗? 〜/子文件夹?【参考方案8】:只使用
<location path=".">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
或者不写路径,因为默认路径是root(.)
【讨论】:
你不能只写点“.”,你会得到一个错误! :D 你确定吗?这个 msdn 资源说默认路径是点! msdn.microsoft.com/en-us/library/vstudio/… 我可以确认 dot (并且根本没有路径)对于指向根目录是有效的,但是如果您放置在此位置下的任何内容在其他地方(该位置之外)指定Web 配置,它会为重复的配置部分引发错误。必须删除“全局”定义才能使其正常工作。 哦,也很重要:在这种情况下,Root 实际上意味着“Root 及其下的所有内容”,因此此解决方案实际上意味着您已授予对整个站点的匿名访问权限。跨度> 【参考方案9】:使用这个:
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="~">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
它对我有用。
【讨论】:
【参考方案10】:默克是对的!
我用过
<location path="">
<system.webServer>
<httpRedirect enabled="true" destination="http://www.newpathdestination.com" exactDestination="true" httpResponseStatus="Permanent" />
</system.webServer>
</location>
在 Windows 网络服务器上(不要问),确保在位置路径的引号之间没有任何内容。将对旧主页的请求重定向到新主页。
【讨论】:
以上是关于如何在 web.config 中指定根 (/) 位置?的主要内容,如果未能解决你的问题,请参考以下文章
在 Web.Config 的 Location Path 元素中指定多个目录
我可以使用Web Deploy将元素插入到web.config中吗?