Есть ли настройка IIS, чтобы избавиться от лишних символов '/' в запрашиваемом URL? - PullRequest
1 голос
/ 17 октября 2008

Общая проблема:

На наши веб-серверы IIS поступают URL-адреса в формате:

http://www.server.com/page.aspx

Мы также видим, что приходят такие URL:

http://www.server.com//page.aspx

Мы хотели бы избавиться от этого дополнительного символа пути, потому что, когда агент пользователя является Internet Explorer, он разрешается как две разные страницы и, таким образом, загружает содержимое дважды, когда его необходимо разрешить из кэша.

Я не уверен, что эту проблему нужно решить с помощью чего-то вроде модуля перезаписи URL или если есть настройка конфигурации.

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Исправьте ваши ссылки!

Более чем вероятно, что вы видите двойную косую черту, потому что у вас есть ошибочные ссылки на вашем собственном сайте, жестко запрограммированные или сгенерированные скриптом. Это легко сделать по ошибке в скрипте, который объединяет http://example.com/ + /page.aspx. Обратите особое внимание на эти типы конкатенаций!

IIS удаляет лишние косые черты, и это не может быть решено с помощью кода ASP.NET или HttpModule. Дополнительные косые черты даже не попадают в файл журнала IIS. Я тестировал с использованием IIS7 и telnet и не смог получить дополнительные косые черты в журнале или ASP.NET.

Я не уверен, почему первоначальный вопрос касается только IE. И IE, и FF допускают дополнительные косые черты в URL и, по-видимому, передают их, хотя я не использовал перехват пакетов для проверки.

0 голосов
/ 17 октября 2008

Я думаю, что проблема с IE, а не IIS.

Перезапись URL-адреса обычно относится к процессу сопоставления URL-адреса с http://example/shoes/clarkes на http://example/shoes.aspx?maker=clarkes на сервере, чтобы браузер не знал об этом.

Что вам нужно сделать, это перенаправить браузер с http://www.server.com//page.aspx на http://www.server.com/page.aspx с помощью 301 Http-кода ответа .

В теории:

Поскольку вы, похоже, используете ASP.NET, наиболее прозрачный способ сделать это - написать HttpModule , который проверяет наличие двойных слешей в запрошенном URI и выполняет перенаправление.

Самый простой способ сделать это - поместить некоторый код в Global.ascx. (Cs | vb) для проверки запрошенного URI на BeginRequest .

В любом случае код для проверки будет таким же.

На практике:

Возможно, IIS или ASP.NET сглотнули двойную букву "/", прежде чем вы получите возможность ее увидеть. Если это IIS, то вам, возможно, придется использовать прокси перед IIS. Если это ASP.NET, то вы можете найти расширение ISAPI , которое выполнит эту работу за вас.

Другие опции

Вы можете либо

  • Разделите страницу так, чтобы большая часть отдельных ресурсов могла кэшироваться отдельно от HTML-контента
  • Обучите пользователей тому, что им не нужно добавлять лишнюю косую черту.
...