Как определить, переписан ли URL-адрес asp.net? - PullRequest
3 голосов
/ 03 ноября 2008

Я использую http://urlrewriter.net/, чтобы переписать URL на моем сайте. Например, я переписываю:

http://www.example.com/schedule.aspx?state=ca

до

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

Что я пытаюсь сделать (для целей SEO), чтобы динамически добавить метатег:

<meta name="robots" content="noindex,follow" />

только на страницу, которая не была переписана. Это потому, что я хочу, чтобы оба URL работали, но только переписанный был проиндексирован поисковыми системами.

Как определить, какая версия страницы была запрошена?

EDIT

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

Ответы [ 5 ]

2 голосов
/ 17 ноября 2008

В дополнение к ответу Чакрита, похоже, что UrlRewriter.NET сохраняет исходный URL-адрес в HttpContext в ключе с именем UrlRewriter.NET.RawUrl . Итак, вы можете попробовать что-то вроде:

bool isPageRewritten = 
   !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]);
2 голосов
/ 03 ноября 2008

лично я бы 301 перенаправил с не переписанного на переписанный, и использовал бы только одну копию страницы. Это проще для пользователей, и с точки зрения SEO у вас есть 1 копия контента.

2 голосов
/ 03 ноября 2008

Если вам нужно сделать это, вы можете сделать что-то вроде:

<add header="X-WasRewritten" value="true" />

И вы можете проверить заголовок в своем представлении и добавить метатег роботов, если вам это нужно.

Это также будет возвращено клиенту, поэтому, если вы хотите скрыть, что вы можете написать CustomAction (http://urlrewriter.net/index.php/support/reference/actions/custom-action), который будет устанавливать какое-то значение состояния в вашем запросе.

Однако иметь два URI для одного и того же ресурса я бы не рекомендовал. Я предлагаю вам просто сохранить одно представление. Если вас беспокоит аннулирование старых закладок, вы можете установить старую для перенаправления на новую.

1 голос
/ 03 ноября 2008

Наиболее очевидный способ - использовать объект Request.Url на вашей странице для получения информации об URL-адресе и строке запроса. Например:

if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx")
   //Not rewritten
else
   //rewritten
0 голосов
/ 08 ноября 2008

Я думаю, что это работа HttpContext.Current.Items .

Вы можете сохранить «Перенаправление» в HttpContext.Current.Items, а затем на своих страницах проверить его на определенную добавленную стоимость.

Полагаю, вы можете добавить к urlrewriter.net хуки, которые могут это сделать, что-то вроде:

HttpContext.Current.Items["Redirected_From"] = currentUrlHere;

А затем на своих веб-страницах вы можете проверить это:

if (!string.IsNullOrEmpty(HttpContext.Current.Items["Redirected_From"]))
    // the page's been redirected, do something!
else
    // no it's visited normally.

Я давно оставил его для инфраструктуры маршрутизации ASP.NET в .NET 3.5 SP1, он лучше, чем urlrewriter.net IMO.

...