前段时间在把项目部署到linux虚拟机上时,发现只能打开网站首页,其他页面访问都是报404错误。一般来说,产生404 错误无非以下几个原因:
1.无法在所请求的端口上访问Web站点。
2.Web服务扩展锁定策略阻止本请求。
3.MIME映射策略阻止本请求。
由于我使用的是ubuntu虚拟机搭建的LAMP环境,在从以上三方面原因可以看出,应该是Apache服务器出现问题,经排查发现是因为没有设置php伪静态。下面就来说一下php伪静态如何设置:
什么是静态和伪静态:
伪静态的概念是相对于静态来说。下面是知乎用户@yskin总结的什么是静态和伪静态,感觉通俗易通,这里拿来参考,下面来看下:
静态网页就是,比如知乎网站上放了一个abc.html文件,你想访问它就直接输入zhihu. com/abc.html。Web服务器看到这样的地址就直接找到这个文件输出给客户端。
动态网页就是,假如你想做一个显示当前时间的页面,那么就可以写个PHP文件,然后访问zhihu. com/abc.php。Web服务器看到这样的地址,找到abc.php这个文件,会交给PHP执行后返回给客户端。而动态网页往往要输入参数,所以地址就变成zhihu. com/abc.php?a=1&b=2。
搜索引擎比较烦这种带问号的动态网页,因为参数可以随便加,而返回内容却不变,所以会对这种网页降权。
于是有了mod_rewrite,它可以重新映射地址。比如当前这个页面的地址htt p://www.zhihu. com/question/20153311,Web服务器收到请求后会重新映射为www.zhihu. com/question.php?n=20153311,然后再执行那个PHP程序。(以上网址均为假设)这样,在内部不改变的情况下,对外呈现出来的网址变成了没有问号的象静态网页的网址一样。
那么,如何来结合动态网页和静态网页的优点呢?那就是伪静态。
伪静态的有点:
1.有 利用SEO 。
2. 防止sql注入 。
3.不产生纯静态文件,因此不增加服务器负担。
静态网页优缺点:
优点:
静态网页的内容相对稳定,因此容易被搜索引擎检索;
缺点:
1.静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
2.静态网页的交互性交叉,在功能方面有较大的限制。
动态网页优缺点:
优点:
1.动态网页以数据库技术为基础,可以大大减少降低网站维护的工作量;
2.采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等;
缺点:动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。
当然伪静态也是有自身的缺点,比动态还要占用cpu资源,多一层匹配,每次都数据库查询。在我们实际开发中,不希望使用真静态, 但是又希望有利于SEO,那就考虑使用伪静态。
如何实现伪静态:
由于我是从ubuntu虚拟机来设置的,这里主要写在Linux下伪静态的设置:
1.检测Apache是否支持mod_rewrite
通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
2.启动Apache的rewrite模块
在shell中输入:
sudo a2enmod rewrite
然后重启一下webserver使更改生效
sudo service apache2 restart
3.在apache2的配置文件中修改
对于 URL rewrite 来说,至少需要把目录设置为
AllowOverride FileInfo
或者
AllowOverride All
即
以上三步即可配置完成。
最后重启服务器和数据库,网站在虚拟机正常运行。
以上部分内容转自知乎
作者:yskin
链接:https://www.zhihu.com/question/20153311/answer/14147350