0

我有三个网站。一个主站点和两个子站点位于位于一个 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/ 并以这种方式访问​​子站点。

我将如何配置我的服务器来阻止它?

谢谢

4

2 回答 2

0

您可以创建第二条规则,将尝试访问的人重定向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/)

于 2013-02-28T21:28:38.670 回答
0

当页面加载时,您可以获得页面引用,如下所示:

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
于 2013-02-28T15:05:51.020 回答