如何在 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/ - 他仍然被重定向到登录页面。

我试过&lt;location path="~"&gt;(没有帮助)和&lt;location path="~/"&gt;&lt;location path=""&gt;(网站完全失败)但无法正常工作。

有什么想法吗?

【问题讨论】:

他们至少可以访问 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>

&lt;system.web&gt; 之前并将该页面设置为您的网络服务器中的默认页面。 在 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】:

如果要指定目录的根目录,请使用&lt;location path="" &gt;

【讨论】:

【参考方案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.config 中配置 SMTP 设置

hdu2121+不定根最小树形图

我可以使用Web Deploy将元素插入到web.config中吗?

大鸟,asp.net中catch到得错误怎么处理才是正确的?

从Web.Config获取多个connectionStrings到字典c#没有循环