Day 10840 Apache、PHP NTS、FastCGI与Rewrite之间不得不说的故事(雾

为单位装新网站,出于安全考虑,环境需要由我自行配置,于是按照开发公司的要求去下载了Apache 2.4、PHP 5.6和MySQL,由于服务器系统为64位Windows,所以理所当然地都下载了64位的组件,其中PHP使用了比较顺手的TS(线程安全,Thread-safe)版本。

一切配置好后,发现说明书中组件要求有一个Zend Guard Loader,于是跑去下载,但当看到支持PHP 5.6的Zend Guard Loader的版本只有x86版本时心里就咯噔一下,尝试配置后,果不其然,64位的PHP无法与32位的Zend组件协作,不得已推倒重来,谁知这只是更大坑的开始。

将Apache 2.4和PHP 5.6 Non Thread-Safe的文件准备好后,却找不到php5_apache那个dll引用,一通检索得知NTS版本的PHP是没有这个文件的,需要采用FastCGI调用,于是在httpd.conf中增添如下行将Apache和PHP进行组合:

# PHP Modules.
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule fcgid_module>
FcgidInitialEnv TEMP “C:/WINDOWS/Temp”
FcgidInitialEnv TMP “C:/WINDOWS/Temp”
FcgidInitialEnv windir “C:/WINDOWS”
FcgidInitialEnv PHPRC “F:/web/php”
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000

<Files ~ “\.php$>”
AddHandler fcgid-script .php
FcgidWrapper “F:/web/php/php-cgi.exe” .php
Options ExecCGI
Allow from all
</Files>
</IfModule>

测试安装phpMyAdmin,一切正常,于是按照手册继续向下配置,需要增添一部分Rewrite规则来支持系统的运行,结果这些规则一加,访问任何东西都是403 Forbidden,连一个html都访问不到了,试了很多方法都没有用,去查看日志时可以看到很多形如下文的错误信息:

[Mon Jun 11 17:39:15.291969 2018] [rewrite:error] [pid 7496:tid 896] [client —.—.—.—:—–] AH00670: Options FollowSymLinks and SymLinksIfOwnerMatch are both off, so the RewriteRule directive is also forbidden due to its similar ability to circumvent directory restrictions : D:/web/htdocs/site1/index.php

但是无论是在httpd.conf还是vhosts配置中的对应位置,增加FollowSymLinks或SymLinksIfOwnerMatch的Options都没有用。

在折腾了一个多小时后,终于发现了一个有用的方法(原文链接):

在FastCGI配置块中,需要将对*.php文件的处理配置增加(或修改为)如下设置:

Options ExecCGI FollowSymLinks

据说是因为FastCGI的配置是与TS的PHP不同造成的。

重启服务,终于可以正常访问了。

Comments

  1. 没本事没学历,没人要啊。
    以及我个人觉得xAMP架构算不上古董,追新不一定就好。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

 剩余字数 ( Characters available )

注:请不要在评论中插入任何链接,否则将自动被识别为垃圾评论,博主将完全看不到。

Notice: please DO NOT add any links in your comment, otherwise it would be identified as SPAM automatically.

*