【问题标题】:block access to site without asp.net URL redirection在没有 asp.net URL 重定向的情况下阻止访问站点
【发布时间】:2013-02-28 14:46:03
【问题描述】:

我有三个网站。一个主站点和两个子站点位于位于一个 discountasp.Net 服务器上的文件夹中 - www.sitea.com、www.siteb.com 和 www.sitec.com。

我使用 web.config 文件中的 URL 重定向将流量重定向到子站点(siteb 和 sitec):

<rule name="siteb" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www.siteb.com$" />
            <add input="{PATH_INFO}" pattern="^/siteb/" negate="true" />
          </conditions>
          <action type="Rewrite" url="\siteb\{R:0}" />
        </rule>
        <rule name="sitec" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www.sitec.com$" />
            <add input="{PATH_INFO}" pattern="^/sitec/" negate="true" />
          </conditions>
          <action type="Rewrite" url="\sitec\{R:0}" />
        </rule>

我的问题是我不希望公众能够输入 www.sitea.com/siteb/ 并以这种方式访问​​子站点。

如何配置我的服务器来阻止这种情况?

谢谢

【问题讨论】:

  • URL 重写和重定向是两个不同的东西,你必须清楚你的意思。重定向通常通过 HTTP 302 代码将用户的浏览器发送到不同的地址,而重写配置服务器以将对 URL 的请求视为对不同 URL 的请求,但不会导致发出另一个请求。

标签: asp.net url-rewriting url-redirection


【解决方案1】:

您可以创建第二条规则,将尝试访问 www.sitea.com/siteb/ 的人重定向到 www.siteb.com

看起来像:

<rules>
    <rule name="Rewrite to siteb.com" stopProcessing="true">
        <match url="^siteb/" negate="true" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="^(www\.)?siteb\.com$" />
        </conditions>
        <action type="Rewrite" url="/siteb/" />
    </rule>
    <rule name="Prevent direct access">
        <match url="^siteb/" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="^(www\.)?sitea\.com" />
        </conditions>
        <action type="Redirect" url="http://siteb.com" />
    </rule>
</rules>

我稍微更改了Rewrite 规则以使其更短。
Redirect 默认发送 301(永久)。
每个尝试直接访问www.sitea.com/siteb/ 的人都会被重定向到www.siteb.com,它自己会重写第一个(www.sitea.com/siteb/

【讨论】:

  • 嘿Cheesemacfly。你这个男人!效果很好,谢谢一百万!
【解决方案2】:

页面加载时,可以获取页面引用,如下:

Dim myReferer as string = Request.UrlReferrer

这将告诉您页面的来源。然后,您可以拆分该字符串并进行比较。

另一种可能更好的方法是通过重定向传递查询字符串。然后,当您的页面加载时,检查该查询字符串。如果不存在,请重定向页面或显示错误。

使用查询字符串重定向示例:

Response.Redirect("myPage.aspx?myId=SomeId")

然后检查myPage中的字符串:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     myString as string =  Request.QueryString("myId")

end Sub

【讨论】:

  • 我认为 OP 实际上可能在谈论重写。
  • 大家好,其实我说的是重定向。抱歉,我原来的问题并不清楚。我真正想做的是将 www.sitea.com/siteb/ 的请求重定向到 www.siteb.com。这有意义吗?
  • 我也想在应用程序级别进行(在 web.config 文件中)
  • 那么,我发布的内容对您有用吗?它在应用程序级别并且确实使用重定向。
  • 嗨,Jason,对不起,我认为您没有理解我的问题。我想在应用程序级别重定向请求,而不是单个页面。也许我的术语不正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2016-05-10
  • 2018-05-18
相关资源
最近更新 更多