Что делает IIS 6.0 с косой чертой после имени страницы в URL? - PullRequest
3 голосов
/ 17 февраля 2010

У меня был вопрос от клиента, который поставил меня в тупик.

Они используют IIS 6.0 и по какой-то причине вместо обычного запроса на страницу на своем сервере, которую я позвоню www.domain.com/Default.aspx, кто-то набрал www.domain.com/Default.aspx / randomstuff

Похоже, что ответ IIS состоял в том, чтобы обслуживать Default.aspx как обычно, но, что касается браузера, путь - www.domain.com/Default.aspx/, а не www.domain.com/ и, таким образом, все относительные пути к CSS, изображениям и т. д. не выполняются

Я посмотрел на трафик в Fiddler, и кажется, что все эти запросы изображений и т. Д., Такие как www.domain.com/Default.aspx/images/image.gif, ТАКЖЕ возвращают содержимое Default.aspx, Само собой разумеется, недопустимое изображение!

Я не верю, что они делают что-то особенное с перезаписью URL, но, чтобы быть уверенным, я попытался провести эксперимент над недавно созданным веб-приложением ASP.NET, и результаты были такими же.

Так что же заставляет IIS передавать URL-адрес, такой как /Default.aspx/randomstuff, в конвейер ASP.NET в качестве запроса для Default.aspx? И можно ли его остановить и заставить бросить 404, как и следовало ожидать?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

Это называется PathInfo компонент.

Вы можете остановиться следующим образом:

if (!String.IsNullOrEmpty(Request.PathInfo)) throw new HttpException(404);
2 голосов
/ 17 февраля 2010

Да, это совершенно нормально. Apache сделает это тоже.

Вы можете использовать его для маршрутизации, поэтому вы можете иметь URL /script.name/random/stuff вместо /script.name?page=random&section=stuff без необходимости перезаписи URL.

Естественно, браузер не знает, что script.name - это настоящий скрипт, что random и stuff на самом деле не являются частью пути на стороне сервера. Таким образом, все URL будут относиться к каталогу random. По этой причине, когда вы пишете приложение с маршрутизацией, вы должны убедиться, что используете корневые или абсолютные URL-адреса, а не относительные URL-адреса.

И можно ли его остановить и заставить бросить 404, как вы ожидаете?

Да, как в ответе Слакса. Однако, вероятно, было бы лучше отправить 301 на реальный адрес без конечных частей информации о пути.

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