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