今天在服务器上新装了apache,把用Symfony开发的后台程序部署到服务器上,发现生产版本的环境无法使用,居然报404 Not Found。
刚开始没想到是什么原因,反复翻文档,检查虚拟主机的配置,和目录权限,以及.htaccess文件,都正确无误。
在自己的Windows环境是好好的,但在服务器上却不行。
后来就拿.htaccess开刀,因为受到一点Apache手册的启发,就是在.htaccess中添加一些错误代码,以检查.htaccess是否正确运行。
其实本来就应该能想到这样做的,只是觉得问题可能出现在其他地方。
果不其然,就是.htaccess中的<IfModule mod_rewrite.c>,在这个分支里面随便写任何东西,都不会起作用。
看来Apache没有正确安装mod_rewrite.so。
一时也不知道如何验证,后来在网上查了半天才查到。
先列一串命令吧:
- apache/bin/httpd -l
列出当前环境中安装了哪些module - apache2/bin/apxs -c mod_rewrite.c -lgdbm
在Apache源码路径的modules/mappers/中,可以找到mod_rewrite.c等所有模块的源码,在这个路径执行apache2/bin/apxs(注意,这里的apxs是apache安装的绝对路径),就会自动编译这个模块,生成.so文件到modules/mappers/.libs/,刚才那个mod_rewrite.so就生成在这里 - apache2/bin/apxs -i -A -n rewrite mod_rewrite.so
在modules/mappers/.libs/这个目录下执行上面的命令,会在apache2/conf/httpd.conf中加入一行
#LoadModule rewrite_module modules/mod_rewrite.so
注意前面是带#的 - apache2/bin/apachectl configtest
检查当前的配置文件语法是否正确,不用等restart不成功再去检查错误了
通过这样几步,检查没问题后,重启apache,mod_rewrite模块就安装完成了。
再打开Symfony的后台,所有页面都可以正确打开。
我通常都在自己的笔记本上开发程序,用xampp套件,很多常用模块都是默认安装好的,使用之前只要把httpd.conf文件中相应模块前面的#去掉就可以了,一下子把程序部署到服务器,很多模块都没装,还真是不适应。