请注意:本页内容发布于 2385 天前,内容可能已经过时,请注意甄别。
为单位装新网站,出于安全考虑,环境需要由我自行配置,于是按照开发公司的要求去下载了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不同造成的。
重启服务,终于可以正常访问了。
换个工作吧,这都什么年代了,还要选如此古董的平台。
没本事没学历,没人要啊。
以及我个人觉得xAMP架构算不上古董,追新不一定就好。