Я думаю, что эта часть кода вносит изменения в контекст.
Page page = BuildManager.CreateInstanceFromVirtualPath(
m_VirtualPath,
typeof(Page)) as Page;// IHttpHandler;
Также эта часть кода бесполезна:
if (page != null)
{
return page;
}
return page;
Это будет всегда возвращаться, страница увядают, это является пустым или нет.
Я вполне уверен, что часть хеша / привязки страницы / закладки URL-адреса не индексируется поисковыми системами и, следовательно, не влияет на рейтинг вашей страницы. Выполнение поиска в Google по запросу "inurl: #" возвращает ноль документов, что подтверждает мое предположение. Ссылки с внешних сайтов будут проиндексированы без хеша.
Вы правы в том, что хеш-часть не отправляется на сервер, поэтому, насколько мне известно, нет хорошего способа создать URL-адрес перенаправления с хешем в нем.
Из-за этого браузер должен правильно управлять хешем во время перенаправления. Firefox 3.5, похоже, делает это успешно. Если вы добавите хеш к URL-адресу с известным перенаправлением, вы увидите изменение URL-адреса в адресной строке на новое место, но хэш остается там успешно.
Изменить : в ответ на комментарий ниже, если там нет знака решетки во внешнем URL-адресе для нужной вам части, тогда URL-адрес вполне можно переписать. Об этом позаботится правило перезаписи Apache:
RewriteCond %{HTTP_HOST} !^exemple\.oursite\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.oursite.com/exemple/$1 [L,R]
Если вы не используете Apache, вам придется поискать в документации сервера нечто подобное.
Вы можете создать страницу на старом адресе, которая перехватывает все запросы и перенаправляет на новый сайт с правильным адресом и кодом.
Я сделал что-то подобное, но это было на asp.net, и я думаю, это не тот язык, который вы используете.
При возврате статуса 301 ваш сервер должен возвращать заголовок "Местоположение:", указывающий на новое местоположение. На практике способы реализации этого варьируются; некоторые серверы предоставляют полный URL-адрес (netloc и путь), некоторые просто предоставляют новый путь и ожидают, что браузер будет искать этот путь в исходном netloc. Похоже, ваше правило перезаписи удаляет путь.
Простой способ увидеть, что такое возвращаемый заголовок Location в оболочке python:
>>> import httplib
>>> conn = httplib.HTTPConnection('exemple.oursite.com')
>>> conn.request('HEAD', '/')
>>> res = conn.getresponse()
>>> print res.getheader('location')
Боюсь, я недостаточно знаю о mod_rewrite, чтобы рассказать вам, как для правильного выполнения правила перезаписи, но это должно дать вам представление о том, что ваш сервер на самом деле говорит клиентам делать.
Поисковые роботы не заботятся о хэш-тегах. И если вы используете их для каких-то flash или AJAX-вызовов, у вас есть более серьезные проблемы, чем ваши 301 редиректы не работают. Потому что, если у вас нет контента в альтернативной форме, поисковые системы не будут индексировать ваш сайт, и вы определенно страдаете от SEO.
Я зарегистрировал свою учетную запись, поэтому не могу редактировать.
zombat: Мне очень жаль, что я допустил ошибку в своем комментарии. Ссылка на наше видео - example.oursite.com/#video_id=233. В этом случае мое правило перезаписи в Apache не работает.
Ник Берарди: Мы изменили способ работы наших ссылок. Мы больше не используем #, только для обратной совместимости