Как получить * фактический * клиентский URL из Классического запроса ASP? - PullRequest
4 голосов
/ 09 июня 2009

Попытка сделать SEO-исцеление на старом (Классическом) ASP-сайте.

Основной страницей уже давно является home.asp, но мы хотим, чтобы все входящие ссылки вместо этого переходили в корень сайта ("/"). Внесены изменения в страницы, но теперь нам нужно выполнить перенаправление, чтобы у нас не было сломанных устаревших входящих ссылок.

Я в основном хочу сделать это:

<% if Request.ServerVariables("PATH_INFO") = "/home.asp" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.mysite.com/"
end if %>

Проблема в том, что все переменные PATH_INFO, SCRIPT_NAME и PATH_TRANSLATED возвращают "/home.asp", даже когда я захожу в корень сайта. Так что это заканчивается бесконечным циклом, перенаправляющим на себя.

Есть идеи?

Редактировать

Чтобы уточнить, я знаю, что документ по умолчанию в IIS установлен на home.asp, и он уже подумал о предложенном обходном пути. Однако в настоящее время у меня нет прав на его изменение, поэтому я спрашиваю здесь, есть ли способ спросить ASP , какой URL-адрес client использовал. Похоже, что сделать это невозможно, поэтому я подам прошение о доступе, чтобы изменить страницу приветствия на что-то другое.

Ответы [ 6 ]

2 голосов
/ 08 июля 2012

Насколько я понимаю, вы хотите изменить значение адреса браузера, если адрес содержит "/home.asp" на "/". Например:

http://www.sitename.com/?some=querystring

вместо

http://www.sitename.com/home.asp?some=querystring

В классическом asp скрипт работает на сервере перед отправкой результата клиенту, поэтому нет способа собрать значение адреса браузера перед выполнением кода, кроме как с помощью javascript и т. Д. На клиентских скриптовых языках.

Использование Request.ServerVariables с «URL», «PATH_INFO», «PATH_TRANSLATED» и т. Д. Просто не будет работать, поскольку предполагается, что они возвращают имя сценария «рабочий момент» (страница asp) .

Но есть способ перенаправить все ваши старые страницы home.asp на новый корневой URL. Вы можете использовать проверку строки запроса Smiple для новой версии сайта. Например:

Если старый адрес был что-то вроде:

"http://www.sitename.com/home.asp?some=querystring&more=querystring"

Затем перенаправьте его на:

"http://www.sitename.com/?ver=2&" & Request.QueryString

В скрипте вы можете проверить, если querystring ("v") = 2 теперь, чтобы точно знать, что адрес из новой версии, иначе перенаправьте его на /? V = 2 независимо от того, какой был URL.

2 голосов
/ 09 июня 2009

Я хотел бы создать новый документ по умолчанию для обслуживания домашней страницы, например, index.asp , и убедиться, что index.asp настроен как самый верхний документ по умолчанию в IIS.

1 голос
/ 01 февраля 2011

Не дает ли Request.ServerVariables("URL") правильное значение?

Насколько мне известно, это должен быть URL из фактического HTTP-запроса, сделанного пользователем

1 голос
/ 16 июня 2009

Необходимо проверить, есть ли в списке по умолчанию какие-либо документы, которые выше, чем home.asp. Если у вас нет административного доступа, вы можете поэкспериментировать, создав такие страницы:

index.asp
default.asp

и т. Д. И т. Д. Если вы можете найти имя файла с более высоким приоритетом, чем home.asp, вы можете скопировать содержимое home.asp в этот новый файл и изменить home.asp, просто перенаправив его в корень. 1004 *

Если home.asp является самой высокой записью в списке, единственное, что я могу предложить, это вывести полный список заголовков HTTP и сравнить выходные данные, генерируемые при посещении /, в отличие от посещения /home.asp. Надеюсь, вы заметите разницу, которую сможете использовать.

<%
  for each header in Request.ServerVariables
      response.write header & " : " & Request.ServerVariables(header) & "<br />"
  next
%>
1 голос
/ 12 июня 2009

Вы можете создать объект сеанса, когда страница сначала перенаправляется, а затем проверить этот сеанс перед повторным перенаправлением (прошло несколько лет, как я работал в классическом asp, но это должно работать):

<% 
if Request.ServerVariables("PATH_INFO") = "/home.asp" AND NOT Session("HasBeenHere") then
  Session("HasBeenHere") = True
  Response.Status="301 Moved Permanently"
  Response.AddHeader "Location","http://www.mysite.com/"
end if 
%>
1 голос
/ 09 июня 2009

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

Хотя HTTP позволяет запрашивать каталог ... т.е. http://www.example.com/ почти все серверы обслуживают одну из страниц сайта для этого документа, ее часто называют default. * Или index. * (Где * любое расширение типа контента, обрабатываемое сервером.)

Удаление home.asp со вкладки «Документы» предотвратит бесконечный цикл, но вы можете обнаружить, что вы случайно сломали свой сайт.

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