我在我的Web应用程序的Global.asax文件中实现了以下代码。
void Application_BeginRequest()
{
string rule = ConfigurationManager.AppSettings.Get("WwwRule");
HttpContext context = HttpContext.Current;
if (context.Request.HttpMethod != "GET" || context.Request.IsLocal)
{
return;
}
if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase))
{
string url = context.Request.Url.ToString();
if (!url.Contains("://www.") && rule == "add")
{
string url = context.Request.Url.ToString().Replace("://", "://www.");
context.Response.Redirect(url);
}
}
}
当我在代码上面运行时,它的工作方式如下
example.com 重定向到 www.example.com/default.aspx
www.example.com 重定向到 www.example.com
http://www.example.com/ 重定向到 http://www.example.com/
最后两个条件非常有效。但是第一个条件没有用,因为它在URL中添加了“default.aspx”,我并不感兴趣。
任何人都可以告诉我如何制作如下
example.com 应重定向到 http://www.example.com
由于
答案 0 :(得分:2)
实际上,在请求到达BeginRequest事件之前添加了/default.aspx。如果你想删除它,你必须实际删除它:
void Application_BeginRequest() {
string rule = ConfigurationManager.AppSettings.Get("WwwRule");
HttpContext context = HttpContext.Current;
if (context.Request.HttpMethod != "GET" || context.Request.IsLocal) {
return;
}
if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase)) {
string url = context.Request.Url.ToString();
if (!url.Contains("://www.") && rule == "add") {
url = url.Replace("://", "://www.");
if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase) {
url = url.Substring(0, url.Length - 13);
}
context.Response.Redirect(url);
}
}
}
答案 1 :(得分:2)
很可能Request.Url附加了default.aspx,因为那是当时实际提供的页面(IIS使它对您透明,因为它是默认页面之一)。
当您创建要重定向的新网址时,请在其末尾添加另一个.Replace(“/ default.aspx”,“”)。所以......
string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");
答案 2 :(得分:0)
使用以下代码更改您的webconfig:它解决了我同样的问题。
<?xml version="1.0"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="default.aspx Redirect" stopProcessing="true">
<match url="^(.*\/)*default\.aspx$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
</conditions>
<action type="Redirect" url="{R:1}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>