2008-11-03 3 views
3

Я использую http://urlrewriter.net/, чтобы переписать URL-адреса на моем сайте. Например, я переписывания:Как определить, был ли URL-адрес asp.net «перезаписан»?

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

в

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

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

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

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

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

EDIT

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

ответ

2

лично, я бы 301 перенаправление с ООН-переписано один к переписан один, и использовать только одну копию страницы. Пользователям проще, и с точки зрения SEO у вас есть 1 копия контента.

+0

Это определенно вариант, но я также хочу изучить опцию nofollow. – Keltex 2008-11-03 16:56:51

2

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

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

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

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

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

1

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

if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx") 
    //Not rewritten 
else 
    //rewritten 
+0

я не уверен, если это будет работать с urlrewriting.net, как переписывание переводит URL в нормальный формат для приложения для использования. – 2008-11-03 16:33:55

0

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

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

Я считаю, вы можете добавить крючки для urlrewriter.нетто, которые могли бы это сделать, что-то Alongs:

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.

2

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

bool isPageRewritten = 
    !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]);