C# NET如何在路径和查询保持不变的情况下对新域执行HTTP 301
如何将所有传入的请求从一个域重定向到另一个域,并且仍然保留路径和查询 范例 从:到: 我一直在web.config、HTTP处理程序和global.asax中摆弄system.webserver,但运气不好。我只得到404(因为内容已被移动) 谢谢 执行重定向时,请使用域1并将其替换为域2 从备注部分: 原始URL被定义为域后面URL的一部分 信息。在URL字符串中 ,原始URL为 /articles/recent.aspx。原始URL包括查询字符串(如果有) 现在 更新: 这:C# NET如何在路径和查询保持不变的情况下对新域执行HTTP 301,c#,asp.net,http,redirect,C#,Asp.net,Http,Redirect,如何将所有传入的请求从一个域重定向到另一个域,并且仍然保留路径和查询 范例 从:到: 我一直在web.config、HTTP处理程序和global.asax中摆弄system.webserver,但运气不好。我只得到404(因为内容已被移动) 谢谢 执行重定向时,请使用域1并将其替换为域2 从备注部分: 原始URL被定义为域后面URL的一部分 信息。在URL字符串中 ,原始URL为 /articles/recent.aspx。原始URL包括查询字符串(如果有) 现在 更新: 这: 绝对可以满足你
绝对可以满足你的需要。您可能会得到一个
404
错误,但这只是因为Url的路径部分在domain2上不存在(google.com
,在上面的示例中)。这是你应该能够预测/纠正或根本不用担心的事情。我不知道您的要求是什么。您可以在IIS中设置重定向,同时跳过加载ASP.NET代码
在IIS for domain1.com的“HTTP重定向”部分,将重定向位置设置为:
http://domain2.com/$S$Q
然后选中“将所有请求重定向到确切目的地(而不是相对目的地)”复选框
所有请求(包括文件夹、文件和查询字符串参数)都将传递到新域
编辑:
由于您没有访问IIS的权限,因此可以使用所述的Request.RawUrl方法
为了避免404错误,您可以在重定向之前检查页面是否存在:
string domain2 = "domain2.com" + Request.RawUrl;
try
{
// *** Establish the request
HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(domain2);
// *** Set properties
loHttp.Timeout = 10000; // 10 secs
// Retrieve request info headers
HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
loWebResponse.Close();
Response.Redirect(domain2); //Page is valid..redirect to it.
}
catch ( WebException ex )
{
if ( ex.Status.Message.Contains("404") ) //or check that the StatusCode property is 404 or similar
Response.Redirect("www.domain2.com" //Redirect to front page since page doesn't exists
}
@Garkbit:我会尝试应用程序_BeginRequest。是的,我尝试过,但我只得到404,用于旧域中不存在的页面。听起来不错,只是我没有访问IIS管理器的权限(web应用程序正在我的托管提供商上运行)。
string domain2 = "domain2.com" + Request.RawUrl;
try
{
// *** Establish the request
HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(domain2);
// *** Set properties
loHttp.Timeout = 10000; // 10 secs
// Retrieve request info headers
HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
loWebResponse.Close();
Response.Redirect(domain2); //Page is valid..redirect to it.
}
catch ( WebException ex )
{
if ( ex.Status.Message.Contains("404") ) //or check that the StatusCode property is 404 or similar
Response.Redirect("www.domain2.com" //Redirect to front page since page doesn't exists
}