2008-10-17 3 views
1

Общая проблема:Есть ли параметр IIS, чтобы избавиться от лишних символов '/' в запрошенном URL?

Мы URLs, приезжающие в наших веб-серверов IIS отформатирован как:

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

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

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

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

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

+0

Вопрос не в том, что он не указывает, где вы видите такие запросы. Мое тестирование показывает, что такие запросы не доходят до файлов журнала IIS7 и не достигают конвейера ASP.NET. IIS. – 2012-01-24 01:06:30

ответ

0

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

Url Rewriting обычно относится к процессу сопоставления 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 response code.

В теории:

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

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

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

В практике:

Может быть, что IIS или ASP.NET съедает двойной «/», прежде чем вы получите возможность увидеть его. Если это IIS, вам, возможно, придется использовать прокси-сервер перед IIS. Если это ASP.NET, то вы можете найти ISAPI Extension, который сделает эту работу за вас.

Другие варианты

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

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

Этот ответ неверен относительно использования HttpModule. Запрос, полученный как `GET //// default.aspx`, никогда не достигает ASP.NET в этой форме. Фактически, он так и не дойдет до файла журнала IIS. Он очищается до `/ default.aspx` для обоих. Таким образом, HttpModule не может решить проблему. Я не тестировал, если ISAPI-расширение видит необработанный запрос. Кроме того, ОП никогда не указывал, какую версию IIS. Я тестировал на IIS7 с .NET 4. – 2012-01-24 01:02:24

0

Исправить ваши связи!

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^