Как определить, посещает ли пользователь «/Default.aspx» или просто «/» - PullRequest
15 голосов
/ 25 декабря 2011

Я пишу в части Application_BeginRequest моего Global.asax.cs.

В целях SEO я пытаюсь перенаправить пользователей, которые просматривают::

http://www.example.com/

Мой вопрос:

Как узнать, на кого смотрит пользователь?Я использовал:

HttpContext.Current.Request.Url.*

Но все параметры идентичны независимо от того, какой из них я посещаю.

Ответы [ 10 ]

11 голосов
/ 31 декабря 2011

Вы можете получить путь, введенный в браузере пользователя, с помощью:

string path = Request.RawUrl;

MSDN

4 голосов
/ 01 января 2012

Для запроса:

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 голосов
/ 31 декабря 2011

Если вы используете IIS 7.x, ознакомьтесь с этим руководством: http://weblogs.asp.net/scottgu/....
Он объясняет, как настроить перенаправление для SEO.

Если вы не можете использовать тег <rewrite> в своем файле web.config, этот пост должен помочь: /258921/asp-net-modul-perezapisi-url-i-web-config...

4 голосов
/ 25 декабря 2011

Я почти уверен, что это конкретное перенаправление происходит на уровне IIS, не входящем в логику вашего приложения, возможно отключить содержимое страницы по умолчанию в IIS?

2 голосов
/ 07 января 2012

Если вас беспокоит только SEO, вы можете использовать канонический «тег».

Если вы разместите его на странице Default.aspx:

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

Googleвсегда будет индексировать

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

как

http://www.mysite.com/

, предотвращая индексацию обеих страниц и конкуренцию в результатах поиска.

Подробнее читайте здесь: http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

1 голос
/ 31 декабря 2011

Если вы запросите http://www.site.com/,, он будет перенаправлен на http://www.site.com/default.aspx задолго до запуска вашего кода (это видно в браузере всех вещей!).

Я полагаю, что это означает, что проверка значения HTTP-Referer скажет вам, что вы хотите знать.

Как получить HTTP Referer: Как получить HTTP Referrer в ASP.NET

Теперь, если пользователь посетил http://www.site.com,, ваш код видит http://www.site.com/default.aspx, вызванный с реферером http://www.site.com. Это не говорит вам, откуда они пришли, но говорит Вы они получили доступ к сайту напрямую.

У вас есть преимущество, заключающееся в том, что большинство поисковых систем следят за перенаправлением и захватывают реальную страницу, поэтому значение referer позволяет определить, пришел ли пользователь из поисковой системы или нет. Однако в других случаях лучше просматривать журналы IIS.

Обратите внимание, что из-за инфраструктуры в ASP.NET, перенаправляющей / в /default.aspx, вы не можете перенаправить /default.aspx в / без создания бесконечного цикла. Если вы хотите служить / напрямую, вам понадобится прокладка перед IIS.

1 голос
/ 31 декабря 2011

Вы можете попробовать

HttpContext.Current.Request.Url.*

с неправильными параметрами:

, поэтому получите URL посетителя вашего сайта по:

Request.AppRelativeCurrentExecutionFilePath 

для получения дополнительной информации:

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

Пожалуйста, предоставьте больше информации и свою попытку решить вашу проблему

0 голосов
/ 07 января 2012

Используйте комбинацию маршрутизации и модуля перезаписи IIS.Возможно, вам придется настроить его так, чтобы он немного подходил для конечного слеша (если вы этого хотите или нет).У меня также есть все мои имена страниц в нижнем регистре.Использование этого почти гарантирует постоянное перенаправление 301 для вашей страницы default.aspx и соответствует лучшим рекомендациям 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>
0 голосов
/ 04 января 2012

Лучший способ узнать, что находится в браузере пользователя, - это 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 за $ (документ), но вы поняли

0 голосов
/ 03 января 2012

Request.url выдаст вам текущий URL, который открывается в окне браузера. Вы можете использовать это для кодирования того, что вы хотите.

Вы также можете сделать это с помощью iis. Установите Default.aspx в качестве вашей страницы по умолчанию, и всякий раз, когда кто-то открывает ваш сайт, адрес будет www.yoursite.com \

Если вы пытаетесь скрыть свой текущий URL от пользователя, это не рекомендуется, но вы можете использовать переписывание URL для iis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...