我在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,管理员等)都具有完全的写入和读取权限。
我的应用程序是在文件夹中构建的,请参见此处:
我用10.0.0.7/doku
或10.0.0.7/lagerverwaltung
称呼它。
答案 0 :(得分:3)
使用IIS时,我会考虑将每个特定的站点文件夹(doku,lagerverwaltung等)转换为自己的应用程序。这样就不会混淆加载时使用哪个web.config文件,然后应用程序可以在他们自己的应用程序池和线程中运行。
要执行此操作,请在IIS中右键单击要转换的特定文件夹,然后在打开的上下文菜单中单击“转换为应用程序”。在随后的屏幕中,您可以选择现有或新的应用程序池,还可以设置您可能需要的任何所需的传递身份验证。
强制子站点在他们自己的应用程序池中运行并专门使用他们自己的web.config文件应该可以消除您的问题,可能回退到基本web.config。
答案 1 :(得分:0)
找到问题根源的系统方法可能是在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功能,而不仅仅是可用或已安装的资源。未选中未安装的功能且不使用。 请在您的服务器上正确安装功能。