如何在带SSL证书的ASP.NET主站下创建独立配置的PHP客服应用?
解决PHP在线客服应用继承ASP.NET Web.config的问题
这在IIS环境下是个挺常见的坑——当你在ASP.NET站点下挂载PHP子应用时,父站的web.config配置会默认向下渗透,导致你的PHP系统被ASP.NET的规则干扰。下面几个实用方案可以解决这个问题:
1. 直接在主站Web.config里阻断配置继承
最简单的方法是在主站的web.config里,给你的livesupport路径加个<location>标签,明确禁止它继承父级配置。示例代码如下:
<configuration> <!-- 这里是主站原本的Umbraco/ASP.NET配置 --> <!-- 核心:让livesupport应用不继承主站配置 --> <location path="livesupport" inheritInChildApplications="false"> <system.webServer> <!-- 这里可以单独配置PHP需要的处理规则,确保能解析.php文件 --> <handlers> <add name="PHP_FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Either" requireAccess="Script" /> </handlers> </system.webServer> </location> </configuration>
这样设置后,livesupport目录下的应用就完全不受主站web.config的影响了,你可以在子应用目录里按需添加自己的配置文件。
2. 给子应用分配独立的无托管代码应用池
ASP.NET的配置是针对.NET应用程序池生效的,所以你可以把livesupport子应用的应用程序池改成无托管代码类型的,从根源上避免加载ASP.NET的配置。
操作步骤很简单:
- 打开IIS管理器,找到主站点下的
livesupport应用 - 右键选「高级设置」,在「应用程序池」选项里,选一个
.NET CLR版本设为「无托管代码」的池(没有的话新建一个就行)
3. 在子应用目录里用web.config覆盖父级配置
如果不想动主站的配置,也可以在livesupport目录下新建自己的web.config,把那些影响PHP运行的父级配置给覆盖掉。比如重置身份验证、清除继承的重写规则:
<configuration> <system.web> <!-- 关闭ASP.NET的身份验证,避免干扰PHP系统 --> <authentication mode="None" /> <authorization> <allow users="*" /> </authorization> </system.web> <system.webServer> <!-- 清空父级的处理程序,只保留PHP需要的 --> <handlers> <clear /> <add name="PHP_FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Either" requireAccess="Script" /> </handlers> <!-- 清除主站Umbraco的URL重写规则,避免影响客服系统的路由 --> <rewrite> <rules> <clear /> </rules> </rewrite> </system.webServer> </configuration>
用<clear />可以彻底清除父级继承的对应节点,然后添加子应用需要的配置即可。
额外提醒
- 先确认服务器上已经正确配置了PHP的FastCGI环境,不然即使解决了继承问题,PHP文件也没法正常解析
- 测试的时候记得清浏览器缓存或者用隐私模式,避免旧配置的缓存干扰结果
- 如果Umbraco有自定义的URL重写规则,记得在主站规则里排除
livesupport路径,或者用上面第三种方法在子应用里清除重写规则
内容的提问来源于stack exchange,提问作者Peter Kindberg
相关产品推荐
相关产品推荐

