IIS 8无法识别web.config

时间:2017-05-19 06:21:36

标签: php iis

我在IIS 8(Win 2012)服务器上运行了多个PHP(Laravel)应用程序。这是我所有应用的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服务器或更改web.config文件(添加空格或其他内容......),它会再次运行。

我不知道......我的其他应用程序没有问题,并且它是相同的web.config代码。

所有用户(IIS_IUSR,管理员等)都具有完全的写入和读取权限。

我的应用程序是在文件夹中构建的,请参见此处:

enter image description here enter image description here

我用10.0.0.7/doku10.0.0.7/lagerverwaltung称呼它。

3 个答案:

答案 0 :(得分:3)

使用IIS时,我会考虑将每个特定的站点文件夹(doku,lagerverwaltung等)转换为自己的应用程序。这样就不会混淆加载时使用哪个web.config文件,然后应用程序可以在他们自己的应用程序池和线程中运行。

要执行此操作,请在IIS中右键单击要转换的特定文件夹,然后在打开的上下文菜单中单击“转换为应用程序”。在随后的屏幕中,您可以选择现有或新的应用程序池,还可以设置您可能需要的任何所需的传递身份验证。

强制子站点在他们自己的应用程序池中运行并专门使用他们自己的web.config文件应该可以消除您的问题,可能回退到基本web.config。

答案 1 :(得分:0)

找到问题根源的系统方法可能是在IIS中启用失败的请求跟踪,如下所述:

https://docs.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis

启用失败的请求跟踪后,请查看HTTP管道并检查重写规则的处理方式。

此外,您可以使用进程监视器查看应用程序池正在访问的确切文件。我会通过(1)您站点所在的文件夹,然后(2)应用程序池标识(3)应用程序池进程ID来过滤它。使用本文查找App Pool的PID:https://blogs.msdn.microsoft.com/ericparvin/2014/04/29/find-pid-for-iis-application-pools-worker-process/

当您的服务器没有负载时,您需要使用进程监视器,因此您不会获得大量的进程事件。

通过上述技巧,您应该能够确定恶作剧应用程序的内容。

祝你好运!

答案 2 :(得分:0)

默认情况下,将验证web.config架构的所有IIS功能,而不仅仅是可用或已安装的资源。未选中未安装的功能且不使用。 请在您的服务器上正确安装功能。

See more about url-rewrite