王志勇 发表于 2026年11月09日 22:30
.htaccess就是PHP的生命,主要是实现伪静态、临时修改Apache配置、php.ini配置等作用。.htaccess有多重要?本博客的语言现在是用PHP写的,正是使用.htaccess实现的改写扩展名为别的语言,比如能改成.jsp,.aspx,.html等任意扩展名,全站找不出一点PHP的痕迹。至少有4种方法能实现修改语言的扩展名,2021年时在这里公布了。巧合的是,今天引用的这2个旧链接,文章ID一个是888,一个是1888。这种巧合的概率是多少?为什么我今天会写这篇博客?(我最近完成的高防程序也必须用到.htaccess,绝对不能缺少,用于自动拦截很多非(隔开)法请求、空链接。)
网上也有很多人说,Nginx支持.htaccess,方法是在Nginx的配置文件/etc/nginx/nginx.conf里,写入这句:
include /var/www/html/abc.com/.htaccess;
然后在这个/var/www/html/abc.com/.htaccess的文件里,写入Rewrite,实现伪静态。
这也是网上唯一能找到的让Nginx支持.htaccess的方法。因为我隔一段时间,会关注Nginx有没有推出支持.htaccess的功能。
非常遗憾,这并不是真正的支持.htaccess,而是Nginx支持在配置文件里使用include语句。此时,如果把这个.htaccess更改为别的任意文件名,也一样能正常运行,例如abc.conf,那么相应的include语句是:
include /var/www/html/abc.com/abc.conf;
这只能说明Nginx的配置文件支持include,实质并不支持.htaccess。
怎样才是真正的支持.htaccess?
就是在配置文件里,不需要写入这句include语句,而在站点建立.htaccess文件,此时.htaccess文件里写入的语句,会生效。
Apache的.htaccess文件,就是这样工作的,不需要在配置文件里写入include语句,直接在站点建立.htaccess文件即可。
Apache的.htaccess文件,有个很大的特性,就是会对当前的目录、以及当前目录下的所有子目录生效。
例如:
1. 在站点的根目录下,建立abc.com/.htaccess,这个.htaccess会对整个站点的根目录、以及所有子目录起作用。
2. 在站点的二级目录,建立abc.com/folder1/.htaccess,这个文件会对abc.com/folder1目录、以及abc.com/folder1下的所有子目录起作用。同时,第1步在网站根目录下建立的.htaccess,也会对abc.com/folder1下的所有子目录起作用。
如果这2个.htaccess文件里写入了相同的指令,会优先执行abc.com/folder1/.htaccess这个文件里的配置。
Nginx的.htaccess,和Apache的.htaccess,有什么不同?
Apache在非常早的版本,就支持.htaccess。我是在2009年时,学会的PHP,那个时候的Apache就支持.htaccess。
到了2026年,Nginx至今仍然不支持.htaccess。
我是怎样学会使用.htaccess的?是因为底层需求:伪静态。网上的教程非常少,几乎接近于0。
因为在200X年的那个时代,所有的动态网页,扩展名都是.asp,.php,中国的互联网上只有这2种语言。到了2003年~2005年,中文有了博客,那时候已经有博主会使用伪静态,非常酷!
能把一个abc.php?id=1233转化为abc/1233.htm,或者abc/1233这样的链接,这就是伪静态。
实现伪静态的方法,主要有2种,目前到了2026年,绝大多数博客都是使用Rewrite;另一种是404错误页,用header('HTTP/1.1 200 OK')语句改为200代码,这种方法已经几乎彻底失传,我一直是用这个方法,因为404错误能节省一个Rewrite模块。
这种404错误页的方法,我当时是从plod.popoever.com的博主学习到的,整个互联网只有他分享过这个方法,记得好像他是在蓝色理想的论坛里分享的。
Nginx的.htaccess,和Apache的.htaccess,有什么不同?
1. Nginx的.htaccess,是强行把一个配置文件改名为.htaccess,然后在Nginx的配置文件里用include,来包含这个文件。
Nginx的这个方法,等效于把.htaccess文件里的内容,写入到Nginx的配置文件,是对整个站点的所有目录有效,属于全局设置,会占资源。
2. Apache的.htaccess,可以设置对整个站点的所有目录有效,属于全局设置;也可以只单独对一个目录有效,方法是把.htaccess文件放在子目录里,属于局部设置。
简言之,Nginx强行建立的.htaccess文件,只能建一个(当然,也可以同时include多个文件,但本质上include多个文件就等于include一个文件,因为include等效于把include文件里的内容,写入到Nginx的配置文件);Apache可以建立无限个.htaccess文件。
为什么Nginx不支持.htaccess?
网上有一种说法是由于Apache的.htaccess文件,会对整个站点起作用,会占资源。其实,确实会对整个站点起作用,但那是网站根目录的.htaccess文件。
Apache完全可以解决这个问题,就是网站根目录的.htaccess文件,控制语句要尽量少写。Rewrite语句,或者404错误页语句,在相应的二级目录、或三级目录建立.htaccess文件。
.htaccess这么重要的作用,Nginx不支持,大概的原因有这2个:
1. 开发者把所有的Rewrite语句写入到Nginx的配置文件,或者使用include的方法。include等效于直接写在配置文件。
2. 尽管Nginx已经发展为伟大的服务器后台,Nginx的开发者本人,也可能尚未使用过Apache的.htaccess功能,造成了关键信息衔接不足。因为会使用Apache的.htaccess的人,非常少,只是某个时间段,在网络上流行了一阵,这个时间段大约在2008年~2011年,其余的时段都是失传的。
从Nginx的404错误页的PHP文件用header('HTTP/1.1 200 OK')改为200代码,会跳转到404错误网页,就能看出来,Nginx的开发者尚未使用过Apache的.htaccess功能,而是在Apache的配置文件里写Rewrite。因为Apache的404错误页,不会跳转,我就是用Apache的.htaccess的404错误页,实现所有的伪静态。
假如将来Nginx能够支持.htaccess,且.htaccess指定的404错误页不会跳转到404错误网页,并不存在模仿,而是基本的技术需求,这2条,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年 +