Как узнать, посещает ли пользователь "/Default.aspx" или просто "/"
Я пишу в части Application_BeginRequest моего Global.asax.cs.
В целях SEO я пытаюсь перенаправить пользователей, которые ищут:
http://www.example.com/Default.aspx
в
http://www.example.com/
Мой вопрос:
Как я могу узнать, на что пользователь смотрит? Я использовал:
HttpContext.Current.Request.Url.*
Но все параметры идентичны независимо от того, в каком я посещаю.
Ответы
Ответ 1
Если это просто 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
Ответ 2
Вы можете получить путь, указанный в пользовательском браузере, с помощью:
string path = Request.RawUrl;
MSDN
Ответ 3
Я уверен, что это конкретное перенаправление происходит на уровне IIS не внутри вашей логики приложения, возможно, отключит материал по умолчанию в IIS?
Ответ 4
Если вы используете IIS 7.x, вы должны посмотреть на этот учебник: http://weblogs.asp.net/scottgu/....
В нем объясняется, как настроить перенаправление для SEO.
Если вы не можете использовать тег <rewrite>
в своем web.config, этот пост должен помочь: fooobar.com/questions/166682/...
Ответ 5
Для запроса:
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
файл, единственной функцией которого является код для переадресации на /
. Это должно сделать это.
Ответ 6
Вы можете попробовать
HttpContext.Current.Request.Url.*
с неправильными параметрами:
так что получите URL-адрес посетителя сайта:
Request.AppRelativeCurrentExecutionFilePath
для получения дополнительной информации:
http://msdn.microsoft.com/en-us/library/system.web.httprequest.apprelativecurrentexecutionfilepath.aspx
Просьба предоставить дополнительную информацию и попробовать свои проблемы.
Ответ 7
Если вы запросите http://www.site.com/, он будет перенаправлен на http://www.site.com/default.aspx задолго до запуска вашего кода (это видно обозревателю всего!).
Я считаю, что это означает, что проверка значения HTTP-Referer подскажет вам, что вы хотите знать.
Как получить HTTP Referer: Получение HTTP-реферера в ASP.NET
Теперь, если пользователь посетил http://www.site.com, ваш код увидит http://www.site.com/default.aspx вызывается с реферированием http://www.site.com. Это не говорит вам, откуда они пришли, но это говорит вам, что они напрямую обращались к сайту.
У вас есть преимущество в том, что большинство поисковых систем следуют за перенаправлением и захватывают фактическую страницу, поэтому значение рефертера можно использовать, чтобы узнать, пришел ли пользователь из поисковой системы или нет. Однако для других случаев вам лучше ходить журналы IIS.
Обратите внимание, что из-за инфраструктуры в ASP.NET перенаправление/на/default.aspx вы не можете перенаправить /default.aspx в/без создания бесконечного цикла. Если вы хотите служить/напрямую, вам понадобится прокладка перед IIS.
Ответ 8
Request.url предоставит вам текущий URL-адрес, который открывается в окне браузера.
Вы можете использовать это, чтобы закодировать что-то, что хотите.
Вы также можете сделать это, используя iis. Установите Default.aspx как страницу по умолчанию и всякий раз, когда кто-то открывает ваш сайт, адрес будет www.yoursite.com\
Если вы пытаетесь скрыть свой текущий URL от пользователя, тогда его не рекомендуется, но вы можете использовать переписывание URL для iis
Ответ 9
Лучший способ узнать, что он находится в местоположении браузера пользователя через 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 для $(document), но вы получаете идею
Ответ 10
Используйте комбинацию маршрутизации и модуль перезаписи 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>