如何判断用户是否正在访问“/Default.aspx”或只是“/”

时间:2011-12-25 10:34:11

标签: c# asp.net .net c#-4.0

我在Global.asax.cs的Application_BeginRequest部分写作。

出于搜索引擎优化的目的,我正在尝试重定向正在查看的用户:

http://www.example.com/Default.aspx

为:

http://www.example.com/

我的问题是:

如何判断用户正在查看哪些内容?我一直在用:

HttpContext.Current.Request.Url.*

但无论我正在访问哪一个参数,所有参数都是相同的。

10 个答案:

答案 0 :(得分:11)

您可以使用以下命令获取在用户浏览器中输入的路径:

string path = Request.RawUrl;

MSDN

答案 1 :(得分:4)

我很确定这个特定的重定向发生在IIS级别而不是你的应用程序逻辑中,或许会关闭IIS中的默认页面内容吗?

答案 2 :(得分:4)

如果您使用的是IIS 7.x,则应该查看本教程:http://weblogs.asp.net/scottgu/...
它解释了如何为SEO设置重定向。

如果您无法在web.config中使用<rewrite>标记,则此帖子应该有所帮助:https://stackoverflow.com/questions/363231/...

答案 3 :(得分:4)

请求:

http://domain.com/

Begin_Request中的HttpModule事件引用时:

HttpContext.HttpRequest.Url.AbsolutePath == "/"
... Url.AbsoluteUri = "http://domain.com/"
... Url.LocalPath = "/"

如果您没有看到Application_BeginRequest中的这些值,则可能需要注册一个单独的HttpModule。 Global.asax事件仅针对托管HttpHandlers调用,因此在IIS执行内部重定向(传输)到“/default.aspx”之后才可能调用它们。

您可能还需要在IIS中禁用默认文档处理,以使其在您感兴趣的方向上工作(大多数网站从/重定向到/default.aspx,而不是相反)。

编辑:另一个想法。将新扩展注册为ASP.NET页面处理程序,使用构建提供程序(在web.config中) - 也许* .asph或类似的东西。然后将现有的default.aspx重命名为default.asph。接下来,将default.asph添加到IIS中默认文件列表的顶部,替换default.aspx。创建一个新的default.aspx文件,其后面代码中唯一的功能是重定向到/。应该这样做。

答案 4 :(得分:2)

如果只是你关注的SEO,那么你可以使用规范的“标签”。

如果您将其放在Default.aspx页面中:

<link rel="canonical" href="http://www.mysite.com/" />

Google将始终编入索引

http://www.mysite.com/Default.aspx

as

http://www.mysite.com/

阻止两个网页被编入索引并在搜索结果中竞争。

您可以在此处阅读更多内容:http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

答案 5 :(得分:1)

您可以尝试

HttpContext.Current.Request.Url.*

参数错误:

所以请通过以下方式获取您的网站访问者网址:

Request.AppRelativeCurrentExecutionFilePath 

了解更多信息:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.apprelativecurrentexecutionfilepath.aspx

请提供更多信息并尝试解决您的问题

答案 6 :(得分:1)

如果您请求http://www.site.com/,它会在您的代码运行之前很久才会重定向到http://www.site.com/default.aspx(所有内容的浏览器都可以看到这一点!)。

我相信这意味着检查HTTP-Referer的值会告诉你你想知道什么。

如何获取HTTP Referer:Getting the HTTP Referrer in ASP.NET

现在,如果用户访问了http://www.site.com,则您的代码会看到http://www.site.com/default.aspx,并使用http://www.site.com的引用进行调用。这并没有告诉你他们来自哪里,但它确实告诉你他们直接访问了网站。

您的优势在于大多数搜索引擎都遵循重定向并抓取实际页面,因此引用值可用于判断用户是否来自搜索引擎。但是,对于其他情况,最好不要使用IIS日志。

请注意,由于ASP.NET重定向/到/default.aspx中的基础结构,您无法将/default.aspx重定向到/不创建无限循环。如果你想直接服务,你需要在IIS前面提供一个垫片。

答案 7 :(得分:0)

Request.url将为您提供在浏览器窗口中打开的当前网址。 您可以使用它来编写您想要的内容。

您也可以使用iis执行此操作。将Default.aspx设置为默认页面,每当有人打开您的网站时,地址将为www.yoursite.com \

如果您试图隐藏用户当前的网址,则不推荐使用,但您可以使用网址重写iis

答案 8 :(得分:0)

了解用户浏览器位置的最佳方法是通过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/"
});

注意:这依赖于jquery for $(document),但是你明白了

答案 9 :(得分:0)

使用路由和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>