【问题标题】:How to specify root (/) location in web.config?如何在 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 的回答应该是接受的答案stackoverflow.com/a/19154854/481207

标签: asp.net web-config asp.net-authorization


【解决方案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 网络服务器上(不要问),确保在位置路径的引号之间没有任何内容。将对旧主页的请求重定向到新主页。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-01
            • 2022-01-05
            • 1970-01-01
            • 1970-01-01
            • 2014-01-08
            相关资源
            最近更新 更多