王志勇 发表于 2016年08月24日 07:25
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的速度有影响。
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
最好的音乐播放硬件
如何打造全静音台式电脑之2026
近期的主题:
重要测试:Debian 13.0
人生讨论(29):判断装修瓦匠是不是×德的方法
Nginx与.htaccess(2)
最漂亮的女华人是谁?
测试http3、Debian 11/12/13
DIY(35-5):干扰源终于找到
https利弊(7):建站税
博客又有活儿得干了:双服务器备份
支架设计(2):功放机+航空头的支架
数码评测(81):停电引起电脑损坏如何防止?
Debian 12.0的“致命”bug
数码评测(80):最好用的平价鼠标和维修/改装
这次的PHP大漏洞/淡定的PHPer们
“明白不”的心理机制(2)
博客/网页有没有必要做访问量统计?
数码评测(79):如何打造全静音台式电脑之2026
AI编程和人工编程的差别
世界上最好的二级域名
数码评测(78):最好的音乐播放硬件
博客新调整计划
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +