Windows服务器,在不影响数据的前提下,抛弃IIS,采用Apache
Windows 2003的服务器,一直采用IIS+PHP+Mysql,虽然Linux+Apache才是PHP的元配,但是因为我不熟Linux,而且IIS从我学生时代用到现在,可谓驾轻就熟,所以沿用IIS+PHP+Mysql这种似乎有些奇怪的组合,虽然一直也有想过换用Apache,但一直没有太好的”理由“,以至于下不了决心,直到这几天因为ISAPI下的Rewrite缺憾而被烦死,才决定改用Apache,希望这个选择是对的!
之前虽然有装过Apache,但都是“点到即止”,今天第一次应用,发现一些细节上的问题,记录一下,以待后用:
之前的服务器环境:Windows 2003+IIS6+PHP5+Mysql5
很久之前看过一些资料,发现IIS是可以跟Apache“和平相处”的,而且可以利用Apache强大的rewrite功能实现“共用”80端口,但是觉得有些“变态”,放弃,就用Apache就好了,反正现在几乎都不碰ASP了。
禁用IIS,安装Apache:
因为服务器上已经有几个网站在运行,所以我要保证在不影响网站数据的情况下用Apache代替IIS,为了保险起见,不删除IIS(以防万一,必要时暂时用回IIS),在服务里直接禁用了IIS的服务项,这样就解决了安装Apache时端口冲突的问题。。。安装Apache2.2,除了Window本身,我不允许其它任何程序安装在系统盘,然后自定义了Apache的安装路径,比如e:\Apache2.2,一切顺利,浏览localhost,见到了“It works!”,安装Apache成功。
配置Apache 2.2来运行PHP5:
打开httpd.conf,找到:
- <IfModule dir_module>
- DirectoryIndex index.html
- </IfModule>
替换为:
- <IfModule dir_module>
- DirectoryIndex index.html index.php
- </IfModule>
当然,这只是一个例子,可以添加更多的默认页。
再查找:
- #AddType text/html .shtml
- #AddOutputFilter INCLUDES .shtml
在这下面增加以下内容:
- AddType application/x-httpd-php .php
接下来这一步,是要允许Apache将PHP程序作为模块来运行!
继续查找:
- #LoadModule ssl_module modules/mod_ssl.so
在这行下面添加:
- LoadFile "E:/PHP/libmysql.dll"
- LoadModule php5_module "E:/PHP/php5apache2_2.dll"
- PHPIniDir "E:/PHP/php.ini"
在这一步,走了好多弯路,一开始我在网上搜过到的都是类似下面这样的描述:
- 在Httpd.conf中找到LoadModule小节,自己添加下面这一行:
- LoadModule php4_module “c:/php/php4apache2.dll”
- 如果你出于某种原因而需要在CGI模式中运行PHP程序(使用Php.exe),请将上面这一行变成注释,并在Httpd.conf中添加下面这些行:
- ScriptAlias /php/ "c:/php/"
- Action application/x-httpd-php "/php/php.exe"
按网上的这个到处被转载的“教程”做,把类似"php4apache2.dll"的文件改为"php5apache2.dll"也是不行的,至于我用的APache 2.2是肯定运行出错的:
1、注意php4apache2.dll、php5apache2.dll以及php5apache2_2.dll是很大差别的,一开始我依样画葫芦,把LoadModule php4_module “c:/php/php4apache2.dll”改为LoadModule php4_module “e:/php/php5apache2.dll”,重启Apache的时候提示启动失败,试了很多方法都行不通,后来想起在此之前有下载一个APMServ(点击这里去APMServ官方下载APMServ5.2.0),进去一看,php目录下php5apache2.dll和php5apache2_2.dll这两个文件都有,说明是有区别的,而我的PHP里面竟然没有php5apache2_2.dll,汗死,就这样浪费了好多时间。
2、下面这两行我按服务器的情况修改以后加到httpd.conf里面,运行php程序的时候会提示路径错误,不知是什么原因,还是不加为妙,
,网上的误导真多!
让Apache支持自定义Rewrite:
查找:
- #LoadModule rewrite_module modules/mod_rewrite.so
去掉前面的#。
同样要注意一下,按网上大部分四处转载的“教程”的说法,这样可以使用自定义rewrite了,其实要能够每个站点“自定义”Rewrite,还需要查找:
- AllowOverride None
把它改为:
- AllowOverride All
到此,Apache最吸引力的rewrite模块可以让你自定义每个站点的Rewrite规则了!
对了,似乎很多教程都没有提到怎样让Apache支持多站点(虚拟主机),这里记录一下:
在httpd.conf最后加入以下类似的内容:
这个就是基于主机名的虚拟主机(一个IP地址,多个网站) 了。
到此,所有的问题完美解决!
其实,看Apache的官方文档是最好的选择,虽然E文的技术类文章看起来有些吃力,但是起码比网上那些以讹化讹的教程有用得多,建议初学者看一下官方的文档再去参考其实中文的资料,这样会少走一些弯路!
- <VirtualHost 172.0.0.1>
- ServerAdmin webmaster@bluefeel.com
- DocumentRoot d:/WwwRoot/bluefeel.com
- ServerName bluefeel.com
- ErrorLog logs/bluefeel.com-error_log
- TransferLog logs/bluefeel.com-access_log
- </VirtualHost>
注意:以上纯属初学者记录,可能错误百出!