代码之家  ›  专栏  ›  技术社区  ›  AsifQadri

重定向默认.aspx到根虚拟目录

  •  13
  • AsifQadri  · 技术社区  · 14 年前

    我有一个简单的问题ASP.NET3.5在虚拟目录下IIS7下运行的应用程序。所以我的应用程序的URL是 http://example.com/app

    http://www.4guysfromrolla.com/articles/072810-1.aspx

    代码:

    if (request.RawUrl.Equals("/default.aspx"))
    {
    newUrl = string.Format("{0}://{1}{2}",
                     request.Url.Scheme,
                     request.Url.Authority,
                     request.RawUrl.Remove(request.RawUrl.LastIndexOf("/default.aspx", StringComparison.OrdinalIgnoreCase)));
    
                   context.Response.Status = "301 moved permanently";
                   context.Response.AddHeader("Location", newUrl);
    }
    

    当应用程序位于虚拟目录下时,似乎进入无限循环。这个请求.RawUrl“属性总是返回”/默认.aspx即使在301重定向导致无限循环之后。如何解决此问题?

    谢谢,

    6 回复  |  直到 11 年前
        1
  •  2
  •   Vivek    14 年前

    只要没有子目录,上面的代码就可以正常工作。哎呀,这是一只虫子ASP.NET:的请求.RawUrl不应包含“/默认.aspx“当URL没有该扩展名时。我已经测试了你的代码,没有子目录也可以正常工作,但是如果默认.aspx在一个目录下请求.RawUrl对象无法摆脱默认.aspx因此形成了无限循环。

        2
  •  1
  •   Eddie    14 年前

    对处理子目录和维护url变量的轻微修改。可能存在更好的比较和替换功能,但这对我使用iis7是有效的。

    if (Request.RawUrl.ToLower().Contains("/default.aspx"))  // use Contains instead of EndsWith to handle url vars
    {
        string newUrl = string.Format("{0}://{1}{2}",
                        Request.Url.Scheme,
                        Request.Url.Authority,
                        Request.RawUrl.ToLower().Replace("default.aspx", ""));  // don't remove the trailing slash so url vars are maintained
    
        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location", newUrl);
        Response.End();
    }
    
        3
  •  1
  •   Simon White    14 年前

    我尝试了URL重写方法。也就是说,这个:

        <rule name="default page" stopProcessing="true">
          <match url="^default\.aspx$" />
          <action type="Redirect" url="{R:0}" redirectType="Permanent" />
        </rule>
    

                <rule name="default page" stopProcessing="true">
                    <match url="(.*)default.aspx$" />
                    <action type="Redirect" url="{R:1}" redirectType="Permanent" />
                </rule>
    
        4
  •  0
  •   Mouhannad    14 年前

    既然你用的是IIS7,试试这个:

    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="default page" stopProcessing="true">
              <match url="^default\.aspx$" />
              <action type="Redirect" url="{R:0}" redirectType="Permanent" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>
    

        5
  •  0
  •   Muhammad Shahbaz    12 年前

    这对我有用。 http://www.w3schools.com/asp/met_redirect.asp

    使用上面的链接,我写了以下几行,执行起来没有任何问题。注意,结尾没有分号。我的默认.aspx页面只包含以下三行。

    <%
        Response.Redirect("~/portal")
    %>
    

    可能的原因是;通常在.aspx页面的顶部或web.config文件文件。如果没有提到语言,IIS将使用VB.NET版我们知道VB.NET版不使用分号终止语句。

        6
  •  -1
  •   Brian Webster Jason    12 年前

    在您的应用程序中使用此代码默认.aspx页码

    <script language="javascript">
    var url=location.href;
    if (url.toLowerCase()=="http://www.doamin.com/default.aspx" || url.toLowerCase()=="http://www.doamin.com/#") {
    window.location= "http://www.doamin.com";
    }
    
    </script>