IIS 7 не может обслуживать страницы ASPX, но работает с файлами по умолчанию
1325
CesarGon
Я развернул веб-сайт ASP.NET 4 в IIS 7 на Windows Server 2008. Когда я просматриваю корневую папку или любую другую папку на сайте, сервер отвечает, предоставляя страницу по умолчанию, Default.aspxкак и следовало ожидать. Однако, когда я запрашиваю определенную страницу с .aspxрасширением, я получаю ошибку 404.
Например, когда я запрашиваю:
http://localhost/MyWeb/
сервер успешно доставляет http://localhost/MyWeb/Default.aspx. Однако, если я явно запросить:
.NET Framework, очевидно, установлен и работает, так как я могу добраться до страниц по умолчанию. Кстати, я заметил, что при сбое сервера и отображении страницы с ошибкой 404, введенный мной URL-адрес (например, http://localhost/MyWeb/Default.aspx) сбрасывает расширение (и читает http://localhost/MyWeb/Default).
Я попытался запустить aspnet_iisreg -iи перезапустить сервер, но ничего не изменилось.
Что мне не хватает? Спасибо.
ОБНОВИТЬ. Я публикую здесь web.configсвой сайт. Нет других конфигурационных файлов, которые применяются к нему.
Обратите внимание, что есть две записи. Первый соответствует MyPage.aspx, это страница, которую я запросил, набрав в поле URL. Это приводит к ошибке 301 (перемещена навсегда). Сразу после этого есть запись для той же страницы без .aspxрасширения, что приводит к ошибке 404 с подстату 0. Я не понимаю, почему полный URL-адрес получает 301 и почему сервер затем пытается доставить (и не удается) страница без расширения.
ОБНОВИТЬ. Я только что провел интересный эксперимент. Я создал новое веб-приложение на своем сервере, имеющее один Test.aspxфайл. Это сработало, как и ожидалось, т.е. сервер доставляет страницу, когда вы запрашиваете ее явно. Затем я скопировал все содержимое с веб-сайта, который вызывает у меня головную боль, и Test.aspxперестал работать! Затем я удалил все из этой сети, за исключением Test.aspxфайла, и он не вернулся к работе, а остался неработающим. В заключение, в веб-контенте есть что-то, что мешает и остается после удаления контента. Это веб-сайт, который я создал с помощью Visual Studio 2015, используя шаблон проекта, который поставляется с Bootstrap, и некоторые другие вещи. Я совершенно сбит с толку.
Я думаю, вы также заметили «Обработчик: StaticFile», что было бы неправильно. В случае, если это помогает людям отлаживать: что, если вы добавите простой файл HTML с именем `Default` (без расширения) в файловую систему?
Arjan 8 лет назад
0
@Arjan: Да, я знаю, что StaticFile не так. Почему-то сервер не обрабатывает файлы ASPX должным образом. Но я не знаю почему.
CesarGon 8 лет назад
0
Итак, обслуживается ли файл с именем `Default`, если он существует, при явном запросе` http: // localhost / MyWeb / Default.aspx`? _ «Почему-то сервер не обрабатывает файлы ASPX должным образом» _ - или он перенаправляет на версию без расширения .aspx, даже не пытаясь.
Arjan 8 лет назад
0
Нет. Сервер по-прежнему выдает ошибку 404.
CesarGon 8 лет назад
0
Вы настроили ASP.NET для локального хоста или только для MyWeb?
harrymc 8 лет назад
0
@harrymc: ASP.NET был установлен на сервере целую вечность. Другие веб-сайты на этом компьютере работают нормально. Только этот конкретный веб-сайт не работает.
CesarGon 8 лет назад
0
Есть ли у этого сайта собственный web.config? Можете ли вы опубликовать файлы конфигурации, которые могут применяться к веб-сайту?
harrymc 8 лет назад
0
Существует только один web.config, влияющий на сайт. Я добавил это сейчас в ОП. Не волнуйтесь о полномочиях там; они подделки ;-)
CesarGon 8 лет назад
0
Содержит ли файл `Default.aspx` исполняемый код? (Или это просто обычный HTML? В этом случае: добавьте некоторый код и проверьте его на предмет анализа.) И есть ли у других веб-сайтов ``определен для расширения` .aspx`?
Arjan 8 лет назад
0
Default.aspx имеет код, и он анализируется и выполняется, когда используется как файл по умолчанию (т.е. при запросе папки). Однако он не анализируется или не выполняется, когда отображается ошибка 404.
CesarGon 8 лет назад
0
Добавьте поле `sc-substatus` в журнал IIS, чтобы различить около 20 различных [404 вариантов] (https: //support.microsoft.comAdd%20/en-us/kb/943891). Проверьте, что отличается для этого одного веб-сайта на сервере, например, дополнительные настройки, обработчики, пулы приложений, разрешения для папок и т. Д.
harrymc 8 лет назад
0
@harrymc: я публикую записи в журнале для ошибки 404.
CesarGon 8 лет назад
0
Хм, с новыми журналами я не понимаю, почему файл `Default` без какого-либо расширения не обслуживается, когда запрашивается` Default.aspx`, так как `301` предлагает явное перенаправление, а следующая строка показывает, что браузер действительно пытаясь получить это. В любом случае: так, перенаправление на URL без суффикса `.aspx` является виновником, который настраивается не в` web.config`, а где-то на экранах настройки ISS, я полагаю?
Arjan 8 лет назад
0
Насколько я вижу, перенаправление HTTP отключено.
CesarGon 8 лет назад
0
`Default.aspx` добавлен в список файлов по умолчанию?
Burgi 8 лет назад
0
Да, конечно. На вершине.
CesarGon 8 лет назад
0
Теперь я добавил третье обновление об эксперименте, который я только что провел. Очень странно. Я ухожу спать до завтра. Спасибо всем, кто помог.
CesarGon 8 лет назад
0
Используете ли вы какие-либо расширения или модули ISAPI помимо ASP.NET? Примечание. Если альтернативный URL-адрес не возвращается с ответом 301, то обычно перенаправление URL-адреса настраивается неправильно. Создает ли ASP.NET-код этого веб-сайта файл .config или добавляет правила перенаправления / перезаписи (проверьте в диспетчере IIS)?
harrymc 8 лет назад
0
Насколько я знаю, я не использую какие-либо сторонние модули или расширения ISAPI. Код ASP.NET на веб-сайте довольно стандартный: он использует Bootstrap и несколько зависимостей javascript, но это все. У меня есть другие подобные сайты, которые работают нормально.
CesarGon 8 лет назад
0
Проблема, по-видимому, возникает после однократного запуска веб-сайта, а затем остается. Если после этого запуска вы не найдете ничего особенного в этом веб-сайте, например, в диспетчере IIS или в каком-либо конфигурационном файле, маловероятно, что мы найдем его здесь. Единственный совет, чтобы найти проблему, которую я могу дать, это перезапустить с нуля и добавлять файлы, пока вы не найдете тот, который вызывает его, а затем выборочно редактировать файл (каждый раз запускать новый сайт, ой).
harrymc 8 лет назад
0
@harrymc: я согласен с твоим советом. Я сделаю это, и я сообщу, когда / если я найду что-нибудь. Спасибо за ваше время.
CesarGon 8 лет назад
0
1 ответ на вопрос
2
CesarGon
После долгих исследований я нашел решение этой проблемы. Я должен сказать, что я знаю, как решить проблему, но я все еще не уверен, почему проблема возникает.
Проблема связана с механизмом «дружественных URL», который доступен в IIS 7. Я деактивировал их, изменив код App_Start\RouteConfig.csс:
var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Permanent; routes.EnableFriendlyUrls(settings);
чтобы:
var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Off; routes.EnableFriendlyUrls(settings);
Это исправило проблему. Насколько я понимаю, дружественные URL-адреса означают удаление расширений файлов, и я думаю, именно поэтому я получаю ошибку 301 и последующую попытку для файла без расширения каждый раз, когда я запрашиваю страницу. Однако я не знаю, почему IIS не может доставить файл.
Во всяком случае, это сейчас исправлено. Спасибо всем, кто помог диагностировать проблему.
Для будущих читателей, или если вы все еще хотите решить исходную проблему: может быть, маршруты в RouteConfig включают суффикс .aspx тогда?
Arjan 8 лет назад
0
@Arjan: Я не уверен, что следую за тобой. Никакие маршруты явно не используются на веб-сайте.
CesarGon 8 лет назад
0
Ах, глядя на несколько примеров, я понял, что файл RouteConfig будет определять маршруты. Ну что ж, решил за тебя :-)
Arjan 8 лет назад
2
Так что я был прав - это была проблема с перенаправлением.
harrymc 8 лет назад
0
Так что я был прав - это была проблема с перенаправлением. ;-)
Arjan 8 лет назад
1
Частично. Насколько я вижу, это «перенаправление», используемое механизмом дружественных URL-адресов, который, кажется, использует результирующий код 301 «постоянно перемещенный», чтобы заставить сервер доставлять файл без расширения.
CesarGon 8 лет назад
0
Дружественные URL-адреса кажутся испорченными или плохо используемыми в приложении, поскольку предполагается, что он делает противоположное: перенаправляет виртуальный URL без расширения на реальный.
harrymc 8 лет назад
0
@Arjan: Значит, мы были правы - это была проблема с перенаправлением; =)
harrymc 8 лет назад
0