Почему перенаправления происходят при отсутствии завершающей косой черты (/) в URL-адресе?

Одно из самых расточительных перенаправлений происходит, когда косая черта (/) отсутствует в конце URL-адреса, который в противном случае должен был бы иметь ее. Например, переход на http://example.com/action приводит к ответу 301, содержащему перенаправление на http://example.com/action/ (обратите внимание на добавленную косую черту).

Итак, в чем причина этого и как ее решить в случае приложения Asp.Net. Любая идея!


person ch.smrutiranjan parida    schedule 06.04.2015    source источник


Ответы (3)


Это часть StaticFileHandler в asp.net, поэтому я не думаю, что вы можете изменить его (легко). Именно это и делает обработчик HTTP по умолчанию для статических файлов.

Источником поведения является строка ниже, которую можно найти в applicationhost.config:

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule">

Я подозреваю, что конкретный модуль, вызывающий перенаправление, — это DefaultDocumentModule, но для подтверждения этого потребуется дополнительное расследование.

Вы можете проверить это, удалив DefaultDocumentModule, изменив эту строку на

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DirectoryListingModule">

Это, вероятно, сломает ваш сайт, но перенаправление исчезнет.

person Warlike Chimpanzee    schedule 25.01.2019
comment
Я подтверждаю, что это происходит при неудачном ведении журнала трассировки, когда у меня есть правило перезаписи для удаления завершающей косой черты, а в папке нет документа по умолчанию. Теперь мне просто нужно выяснить, как остановить это. Я бы ожидал 404 вместо 301, что вызывает цикл перенаправления. - person BonzoFestoon; 05.08.2020

То, что вы описываете, на самом деле хорошо и рекомендуется в Интернете. С тестового веб-сайта nibbler: «Поисковые системы могут рассматривать их как отдельные страницы с дублирующимся контентом, за что они могут наказывать».

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

Но мне также интересно, где это происходит. Я не сразу вижу это в моей маршрутизации. если кто знает, поделитесь.

ОБНОВЛЕНИЕ: по-видимому, у вас есть это свойство

routes.AppendTrailingSlash = true;

может из-за этого эффект?

person LanderV    schedule 20.04.2015

Это следующая логика пути Unix. URI без косой черты в конце указывает на файл, а с косой чертой в конце — на каталог.

Если вы нажимаете URI с завершающей косой чертой и на своем сервере вы установили список каталогов, вы увидите все файлы по этому пути. В противном случае может быть выбрано перенаправление 301 или 302, чтобы указать, что клиенту необходимо отправить запрос, используя другое местоположение.

С точки зрения клиентов эти 2 URI могут быть одинаковыми в Интернете. В результате сервер в большинстве случаев вместо сбоя будет перенаправляться в другое место. Конечно, это настраивается.

Хотя я не эксперт в ASP, но определенно перенаправление можно контролировать на сервере либо в конфигурации, либо программно.

person Vahid    schedule 10.08.2016