我正在编写Global.asax.cs文件中的Application_BeginRequest部分。
出于SEO的目的,我正在尝试将正在查看以下内容的用户重定向:
http://www.example.com/Default.aspx
发送给:
http://www.example.com/
我的问题是:
我该如何知道用户正在查看哪个页面?我一直在使用以下代码:
HttpContext.Current.Request.Url.*
但是,无论我访问哪个参数,它们都是相同的。
我正在编写Global.asax.cs文件中的Application_BeginRequest部分。
出于SEO的目的,我正在尝试将正在查看以下内容的用户重定向:
http://www.example.com/Default.aspx
发送给:
http://www.example.com/
我的问题是:
我该如何知道用户正在查看哪个页面?我一直在使用以下代码:
HttpContext.Current.Request.Url.*
但是,无论我访问哪个参数,它们都是相同的。
Request.RawUrl
返回的是根路径之外的任何内容(请参阅MSDN),包括查询字符串...并且它会在IIS在请求开始时完成任何重定向后发生。 我强烈建议您查看像RickNZ或Joshua等人的答案...您也可以尝试使用UrlRewrite模块。 - one.beat.consumer<rewrite>
标记,则可以参考此文章: https://dev59.com/r3RC5IYBdhLWcg3wP-j4。我相信这个重定向是在IIS级别而不是应用程序逻辑内发生的,也许可以在IIS中关闭默认页面功能?
针对请求:
http://domain.com/
当在 HttpModule
中从 Begin_Request
事件引用时:
HttpContext.HttpRequest.Url.AbsolutePath == "/"
... Url.AbsoluteUri = "http://domain.com/"
... Url.LocalPath = "/"
Application_BeginRequest
中没有看到这些值,则可能需要注册单独的HttpModule
。Global.asax事件仅对托管的HttpHandlers
调用,因此它们可能要等到IIS进行内部重定向(转移)到“/default.aspx”之后才会被调用。/
重定向到/default.aspx
,而不是相反)。default.aspx
重命名为default.asph
。接下来,在IIS的默认文件列表顶部添加default.asph
,替换default.aspx
。创建一个新的default.aspx
文件,其代码后台的唯一功能是重定向到/
。这应该可以解决问题。<link rel="canonical" href="http://www.mysite.com/" />
http://www.mysite.com/Default.aspx
as
http://www.mysite.com/
如果您请求http://www.site.com/,它会在您的代码运行之前重定向到http://www.site.com/default.aspx(这对所有浏览器都可见!)。
我认为这意味着检查HTTP-Referer的值将告诉您想要知道的内容。
如何获取HTTP Referer:在ASP.NET中获取HTTP Referrer
现在,如果用户访问了http://www.site.com,您的代码将看到http://www.site.com/default.aspx被调用,并且引用者是http://www.site.com。这并不告诉您他们来自哪里,但它确实告诉您他们直接访问了该网站。
在这里,您有一个优势,大多数搜索引擎都会遵循重定向并抓取实际页面,因此referer值可用于判断用户是否来自搜索引擎。但是,对于其他情况,最好遍历IIS日志。
请注意,由于ASP.NET基础设施将/重定向到/default.aspx,因此您无法将/default.aspx重定向到/而不创建无限循环。如果您想直接提供/,则需要在IIS前面放置一个shim。
HttpContext.Current.Request.Url.*
使用错误的参数:
因此,通过以下方式获取您网站访问者的 URL:
Request.AppRelativeCurrentExecutionFilePath
更多信息请参见:
请提供更多关于您的问题的信息和您尝试过的内容。Request.url会给你当前在浏览器窗口中打开的URL。你可以用它来编写你想要的程序。
你也可以使用IIS来实现这一点。将Default.aspx设置为默认页面,每当有人打开你的网站时,地址就是www.yoursite.com\
如果你想要隐藏当前的URL不让用户看到,那么这并不建议,但你可以使用IIS的URL重写来实现。
要知道用户浏览器位置的最佳方法是通过JavaScript。
如果你想将所有人从Default.aspx重定向回www.mysite.com,你可以这样做:
$(document).ready(function() {
if(window.location.href == "http://www.mysite.com/Default.aspx")
window.location.href = "http://www.mysite.com/"
});
使用路由和IIS重写模块的组合。您可能需要微调一下以适应尾部斜杠(是否需要)。我还将所有页面名称都设置为小写。使用此方法几乎可以确保您的default.aspx页面具有一致的301永久重定向,并符合SEO最佳实践。
在Global.asax中:
<%@ Import Namespace="System.Web.Routing" %>
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute("default", string.Empty, "~/default.aspx");
}
然后在你的web.config文件中:
<rewrite>
<rules>
<rule name="Default Document" stopProcessing="true">
<match url="(.*?)/?default\.aspx$" ignoreCase="true" />
<action type="Redirect" url="{R:1}/" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
<asp:HyperLink ID="homeLink" runat="server" NavigateUrl="<%$RouteUrl:RouteName=default %>">HOME</asp:HyperLink>