Nginx与.htaccess

王志勇 发表于 2016年08月24日 07:25

本文通过Nginx与Apache的不同,讨论.htaccess。最近开始测试Nginx,查阅了很多Nginx的网页,可悲国内太多文章是转来转去,甚至有很多是没有经过验证的、错误的。经过测试,Nginx实质上并不像Apache一样支持.htaccess,也就是说实质上目前并不支持.htaccess。而是目前的Nginx,直接支持Rewrite。

Nginx使用Rewrite的方法,网上有2种,一种是在/etc/nginx/nginx.conf文件里的站点设置server{}里写上include …….htaccess语句,第二种方法是同样在server{}的位置,直接写上Rewrite的语句。实际上,这两种方法是同一种。

这里讨论实现伪静态的Rewrite和404页,这两者是不一样的。

国内使用Wordpress、Discuz的用户,多数人是在站点根目录建立.htaccess,在此文件写入Rewrite语句,但较少人是用Apache的404页来实现伪静态。这两者实现的效果是一模一样的,相比较而言,Rewrite有2个缺点,一是需要调用Rewrite模块、二是正则表达式规则不易使用。用404页来实现伪静态,正好克服了这2个缺点,因为404错误的功能是Apache内置的,用$aa=$_SERVER['REQUEST_URI'];来获取地址栏,用explode("&",$aa)来提取地址栏的所有参数,会有极大的灵活性,并重新处理。

甚至可以看出调用Rewrite模块在多数情况下,是不必要的,因为被Rewrite调用的动态页面,同样要用$_GET["name"]来获取参数值。而404页的伪静态,通过explode()函数已经分析出了这些参数值。这等于多调用了一个Rewrite模块。

但有一种情况必须用Rewrite模块,就是伪静态后的页面,如果它是接受Post提交的页面,这时不能用404页。而Get的页面,可以用404页。

经过测试,发现Nginx与Apache的Rewrite过程几乎是相同的,如果.htaccess是放置在站点的根目录,那么这个过程几乎是完全相同的,也就是这个Rewrite的规则对站点的所有页面都发出了指令,或者说是整站的全局设置。例如,在站点根目录里的.htaccess,有一条规则是对abc.php进行伪静态重写,而如果被访问的页面是def.php,虽然没有对def.php进行伪静态重写,但是def.php也接收到了对于abc.php的重写规则,只是没有对def.php产生作用。不仅如此,根目录的.htaccess对站点的所有页面都会发出指令。对于访问量不大的站点,可能影响较小,但是访问量大的站点是有一定影响的。
简单地说,如果把.htaccess放在根目录,是对整站的全局设置(Nginx与Apache都是这样的)。

可能有朋友会想到,如果把Nginx所include的.htaccess文件,不放在根目录,是不是就能避免全局设置?Apache可以避免,但是Nginx避免不了。因为Nginx所include的文件,无论.htaccess文件是处于哪层目录,它的作用级别,都是全局的,这是因为include起的作用只是引用代码而已,它还是在server{}这里产生作用。

Apache的.htaccess,经过测试,是对当前目录、以及它的所有子目录生效。例如,如果把.htaccess放在根目录,则对整站有效。如果把.htaccess放在/abc目录,则只对/abc目录和/abc的所有子目录有效。对于程序开发者而言,是不会把.htaccess放在网站根目录(因为会产生不必要的全局设置),而是在需要Rewrite的目录建立一个.htaccess文件(更好的解决办法是用404来实现伪静态)。

既然Nginx不能避免Rewrite的全局设置,也就是让目录下的.htaccess生效,那么我们试一试Nginx能不能用404页来实现伪静态?结果太遗憾了。Nginx虽然支持自定义404错误页,但是访问伪静态的链接,马上跳转到404的文件页面。而Apache,则是停留在伪静态的链接,不会跳转。

由此可见,无论是Rewrite、还是404页,Apache都比Nginx完善。在此看来,目前的Nginx如果能够改进这两方面,就会成为PHP的Web服务器的首选。

在打开网页方面,Nginx确实比Apache快很多。究竟为什么快,需要做很多的测试,或者在某一天就会无意间发现原因。我打开VPS的Apache的配置文件,发现LoadModule语句,竟然加载了52个模块。而我在本机测试的miniapache(迷你Apache),只加载7个模块。这些模块加载得太多,可能对Apache的速度有影响。

0条评论:

发表评论:
名字: (*必填)
博客: (可省,仅限于Blog地址)
验证码: p48u58r68e78 (*必填)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

文章分类 Category:
真相与UFO Truth and UFO
编程 Program
PHP
Blog的发展 Development
为什么写博客 W-do we Blog
互联网 Internet
BBS社区研究 Community
QQ研究 QQ Research

置顶的文章:
程序开发的门槛儿
为什么不能夸孩子调皮?
我的3种博客写作方法
最大的公益事业是UFO
再谈四维空间
开发文档和程序注释
Arsue Blog程序的扩展
独立微博开发之设想

近期的主题:
2017.7第2篇
auiou.com今天换上了KVM
CentOS, Debian, Ubuntu三种VPS系统的LAMP属性小结
Debian 6.0和Ubuntu 14.04新装机的参数记录
Linux VPS的速度优化
Nginx与.htaccess
CentOS 6新装机的参数记录
auiou.com的VPS的内存占用测试
2016年8月第一帖
不喜欢锻炼身体的朋友
看《第五空间》
看《爱情公寓》的一点感想
生命的意义在于每一天都是人生的开始
安卓机顶盒收到小记
人生中最可怕的事情是拖延
不能贪吃/不能贪喝/不能贪凉
“世面”和人生意义
计划推出一个重要的“网络存档”(网络记事本)快速小程序
最近几个月博客更新减缓的原因
汽车越来越多
编写完成了清爽的贴吧浏览程序/贴吧占用内存测试
猫/无线路由器/瑞银无线网卡 最简单有效的散热方法
最近录制的歌
家用无线路由器选购的一些建议
网络电视机顶盒选购的一些建议
无线路由器当作无线交换机实例
2013-08-08:人生的意义&谨言慎行
怎样对治重症的拖沓的毛病?
磊科NW336无线网卡使用感受
腾达311R无线路由器频繁掉线解决一例(其它品牌和型号可能也适用)
网络电视杰科T1使用感受(杰科T1/T2/T3怎么样?)
人为什么会无聊?无聊的时候该做什么?
2013-07-14:看不见的全息摄像机
想法:2013-07-12
有趣的植物3:景天科多肉植物
有趣的植物2:米邦塔食用仙人掌
最有趣的植物
想法:2013-06-30
好好地修心
中国现代和未来的黑人问题/广州黑人
KVM主机竟然死机
想法:2013-06-13
行人的过错
为什么不能夸孩子调皮?/怎样教出一个好孩子?
打招呼的一瞬间
欢迎哥们儿们加我的QQ
好心一定会有好报
拜金女的下场都是不好的
最近很忙,写作的思路断了
狂做好事,消除烦恼
最大的公益事业是UFO/怎样做UFO研究?
  

王志勇:程序设计者。
1980-09-26 (37周岁)

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏 | Arsue官方Blog
Gratitude | Time | Auciou
matnue | aucist | Taimt | Caimt | ac315 | Arsue | IC Search | TDNote | HKANS | aroat | Vaimt Panel | txfor | 网树 | cdfor | aufirm | ixnes | AnyDiary | Tuarm | Tovate | Urtal | coumit | cersta | tratom54.91.171.137 2017-12-12_18:55

Blog存档 Archives

2013年08月(9)
2013年07月(6)
2013年06月(7)
2013年05月(22)
2013年04月(17)
2013年03月(20)
2013年02月(21)
2013年01月(6)
2012年12月(3)
2012年08月(8)
2012年07月(4)
2012年06月(4)
2012年05月(6)
2012年04月(13)
2012年03月(11)
2012年01月(7)
2011年10月(8)
2011年09月(4)
2011年08月(2)
2011年06月(2)
2011年05月(6)
2011年04月(10)
2011年03月(16)
2011年02月(16)
2011年01月(15)
2010年12月(12)
2010年11月(9)
2010年10月(3)
2010年05月(4)
2010年01月(7)
2009年12月(10)
2009年11月(4)
2009年10月(8)
2009年09月(24)
2009年08月(20)
2009年07月(6)
2009年06月(11)
2009年05月(16)
2009年04月(20)
2009年03月(29)
2009年02月(18)
2009年01月(15)
2008年12月(17)
2008年11月(10)
2008年10月(13)
2008年09月(8)
2008年08月(4)
2008年07月(5)
2008年06月(9)
2008年05月(12)
2008年04月(15)
2008年03月(26)
2008年02月(22)
2008年01月(29)
2007年12月(30)
2007年11月(28)
2007年10月(30)
2007年09月(8)
2007年08月(8)
2007年07月(21)
2007年06月(23)
2007年05月(31)
2007年04月(34)
2007年03月(29)
2007年02月(18)
2007年01月(41)
2006年12月(23)
2006年11月(10)
2006年10月(10)
2006年09月(29)
2006年08月(33)
2006年07月(17)
2006年06月(30)
2006年05月(4)
2006年01月(3)
2005年09月(4)


Copyright © 2006-2017 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue