开启apache服务,结果报错:
在Windows用下面的命令查看关于443的所有服务
如果是Linux环境的话,就用 netstat –tunl | grep 443
找到端口是443的服务,最后一个数字表示pid
看一下pid为2440的是什么服务
杀掉占用443端口的进程
可以开启apache服务了,输入localhost,显示It works的页面,说明apache启动成功了。
输入部署的项目的IP和端口,网页上提示错误“you don’t have permission to access the server”。上网查资料,得知原来httpd.conf上有如下的参数:
这是apache的项目目录,由于我们访问的并不是该目录,于是apache就禁止我们访问该目录以外的内容。我们的部署的项目在httpd-vhosts.conf中也有DocumentRoot这一参数,因此httpd.conf中的这个就用不上了,可以注释掉。
配置文件httpd.conf中的这几行也是要注释掉的。
下面还有一个<Directory>标签,注释有点长,为了方便阅读,我这里把注释删掉。将原来的语句:
<Directory ${ServerRoot}/htdocs>
Options Indexes FollowSymLinks
AllowOverride None
#Require all granted
</Directory>
修改为:
<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>
这个’/’表示根目录。
我们的项目是配置在httpd-vhosts.conf中的,要使得该配置生效,需要httpd.conf中去掉下面的注释:
同时<Directory>标签中要有Options Indexes FollowSymlinks,表示使用httpd-vhosts.conf中的配置
接下来,把php和apache配合起来,需要在apache的httpd.conf中加载关于php的模块。
上网查询,发现需要php7apache2_4.dll。并且由名字可知,php7是跟apache2.4配合。
在PHP的文件夹中找了半天没有找到php7apache2_4.dll,上网一查,发现non thread safe版本的php没有这个dll文件,thread safe版本的php里面才有,所以要上php官网重新下载一个thread safe版本的php。
按要求全部配好,apache服务却启动失败,显示”Cannot Load php7apache2_4.dll into server”
上网查,有网友说可能是因为php和apache2_4.dll的版本不匹配
Apache是x86,而php7.2.14是x64,版本不匹配。
除了需要两者版本都要是x86或x64外,还要求电脑本地已经安装了相应的VC环境。我这里php7.2至少需要vc15,而我电脑本身已经安装了VC17,所以不用额外再装,否则还要从微软官网下载对应的vc环境。
下载了新的php后,又要把之前的操作进行一次,心累。(说明:相信不少人都是跟我一样,先是用php练习语法,后来写网页时才下载apache,然后在apache服务开启失败才通过找文章发现版本不匹配)
还有常规的操作,就是把php.ini-development改名为php.ini,打开找到extension_dir,去掉注释,并把自己电脑上的php的安装路径填上。
不幸的是,项目的页面上还是显示PHP源代码,说明根本PHP没有解释到网页上的代码。这时首先要检查php-cgi(Windows)或者php-fpm(Linux)是否开启。但是我的模块的确是已经开启了,上网查资料,发现原来需要在httpd.conf补充下面的:
这句让apache运行的php和html文件可以解释文件中的php代码
如果是使用PHP的框架例如thinkphp、laravel等,并且需要用到URL的重写的话,需要给apache开启下面的模块,在httpd.conf中加上下面的语句:
修改了配置文件记得重启apache服务,不然运行的还是修改前的配置内容。
重启完毕后再次输入项目的ip和监听端口,终于看到项目的首页了。
心得:
配置这个apache花了我将近2天,期间找了不少博客文章并综合起来,踩了不少坑。对于刚刚上手php的,重点是学会使用php代码写业务逻辑,可以用那些一键安装包。但是真正要了解项目,首先就要会搭建项目开发环境,这时最好不要再用那些一键安装包,因为其中隐含了很多操作细节。这两天的搭建环境让我对apache的参数有了更进一步的理解。其实以httpd.conf为例的配置文件里,每个参数都有说明,甚至有网页链接让你可以细致地了解该参数的含义,毕竟官方文档的解释才是最权威的。