Apache和IIS之间的PHP脚本评估差异

时间:2018-07-21 21:38:14

标签: php apache iis uri

今天,我发现Apache和IIS使用PHP脚本评估URI的方式之间存在重大差异。我想知道此行为的名称,以及是否可以在每个品牌的服务器中将其打开或关闭。

我在Windows 10(IIS 10 64位和Apache 2.4 64位(来自ApacheHaus))上对此进行了测试。

考虑以下网址:

  

example.com/folder/ script_A.php / folder / script_B.php

IIS行为

在IIS中,仅当脚本名称位于URI的末尾时才执行PHP脚本。因此,执行了script_B,并且假定段“ script_A.php”只是一个文件夹名称。

Apache行为

但是,在Apache中,即使在URI的中间找到了,在URI中找到的第一个PHP脚本也是要执行的脚本。因此,执行了script_A,“ script_A.php”之后的所有内容都只是您要处理的额外URI信息。

为什么这很重要?

这会影响某些PHP框架路由其URL的方式。例如,在CodeIgniter中,URL始终以“ index.php”开头,其余URL段用于模型/视图/控制器逻辑。

CodeIgniter中的URL如下所示:

  

example.com/index.php/products/view/shoes

因此,CodeIgniter的默认路由机制在IIS中不起作用,因为IIS仅执行在URL末尾找到的文件名(因此,在此示例中,IIS查找名为“ shoes”的文件或文件夹) )。为了使CodeIgniter在IIS中工作,您必须在web.config中打开URL重写行为,该行为会将每个请求都定向到“ index.php”。

行为的名称是什么,如何在两台服务器上修改此行为(如果可能)?

0 个答案:

没有答案