Day 4514 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不同造成的。

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

注:所有评论将在审核通过后显示,请不要在评论内容的任何位置出现链接,否则您的评论将被自动移入回收站,且永远不会被复审。

All comments will be available after being manually reviewed, please do not include any links anywhere in your comment, otherwise your comment will be automatically deleted and are not eligible for review.

2 条评论

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注