我在一个虚拟目录下的IIS7下运行了一个简单的ASP.NET 3.5应用程序。因此,我的应用程序的网址类似于http://example.com/app。我想301-将请求重定向到example.com/app/default.aspx到example.com/app以获得更好的SEO。我只能通过代码进行重定向,而不是通过任何IIS设置。我无法通过本文中提到的代码做到这一点:
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);
}当应用程序位于虚拟目录下时,似乎会进入无限循环。即使在301重定向导致无限循环之后,request.RawUrl属性也始终返回"/default.aspx“。如何解决此问题?
谢谢,
Asif
发布于 2010-09-01 20:20:54
只要你没有子目录,上面的代码就能正常工作。这是ASP.NET中的一个错误:当Request.RawUrl没有那个扩展名时,它不应该包含"/default.aspx“。我已经测试过您的代码,它在没有子目录的情况下工作得很好,但是如果default.aspx在一个目录下,Request.RawUrl对象将无法摆脱default.aspx,从而导致无限循环。
发布于 2011-04-01 04:21:35
对处理子目录和维护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();
}发布于 2011-07-09 05:52:37
我尝试了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>https://stackoverflow.com/questions/3609763
复制相似问题