IIS 8 не распознает web.config
Я запустил несколько приложений PHP (Laravel) на моем сервере IIS 8 (Win 2012). Это файл web.config
для всех моих приложений:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)/$" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Но при одном применении IIS время от времени создает проблему: мое приложение не работает, потому что URL-адреса неверны. Если я перезапущу веб-сервер ИЛИ измените файл web.config
(добавьте пустое пространство или что-то еще...), он снова будет работать.
Я понятия не имею... мои другие приложения работают без проблем, и это тот же код web.config
.
Все пользователи (IIS_IUSR, Admins и т.д.) имеют полный доступ для записи и чтения.
Мои приложения структурированы в папках, см. здесь:
![введите описание изображения здесь]()
И я называю его 10.0.0.7/doku
или 10.0.0.7/lagerverwaltung
.
Ответы
Ответ 1
При использовании IIS я бы рассмотрел возможность конвертации каждой из конкретных папок сайта (doku, lagerverwaltung и т.д.) в свое приложение. Таким образом, не будет никакой путаницы в отношении того, какой файл web.config используется при загрузке, а затем приложения могут запускаться внутри собственного пула приложений и потоков.
Для этого внутри IIS щелкните правой кнопкой мыши по конкретной папке, которую вы хотите преобразовать, и нажмите "Преобразовать в приложение" в появившемся контекстном меню. На следующем экране вы можете выбрать существующий или новый пул приложений, а также настроить любую необходимую сквозную аутентификацию, которая вам может понадобиться.
Принуждение подсайтов для запуска внутри собственного пула приложений и использование их собственного файла web.config специально должно устранить вашу проблему с возможной обратной связью с базовым web.config.
Ответ 2
Системный подход для поиска корня проблемы может быть причиной неудачной трассировки запроса в IIS, как описано здесь:
https://docs.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis
После того, как вы включили отслеживание неудачных запросов, посмотрите на HTTP-конвейер и проверьте, как обрабатываются правила перезаписи.
Кроме того, вы можете использовать монитор процесса и посмотреть, какие точные файлы имеют доступ к вашему пулу приложений. Я бы отфильтровал его по (1) папке, на которой находится ваш сайт, затем (2) идентификатор пула приложений (3) идентификатор процесса пула приложений. Используйте эту статью, чтобы найти ПИД-пул приложений: https://blogs.msdn.microsoft.com/ericparvin/2014/04/29/find-pid-for-iis-application-pools-worker-process/
Вам нужно использовать монитор процесса, когда на вашем сервере нет нагрузки, поэтому вы не получаете поток событий процесса.
С помощью вышеописанных методов вы сможете приглушить то, что происходит в озорном приложении.
Удачи!
Ответ 3
По умолчанию схема web.config проверяется на все функции IIS, а не только на доступные или установленные ресурсы. Не установленные функции не проверяются и не используются.
Пожалуйста, правильно установите функцию на своем сервере.
Подробнее о url-rewrite