在Apache2的日常运维中,.htaccess文件绝对是个绕不开的存在。它最大的价值,就是让你在目录级别就能搞定配置,完全不用去动主配置文件(比如httpd.conf或apache2.conf)。换句话说,你可以在不惊动全局配置的前提下,对某个特定目录进行精细化控制。下面,就来聊聊怎么用好它。

启用.htaccess文件
开工之前,得先确认Apache2允许用.htaccess。这通常是在主配置文件里设置的。
在httpd.conf或apache2.conf中
找到块,确保里面有这么一行:
AllowOverride All
如果只想允许特定的指令,那就用更精确的写法:
AllowOverride FileInfo AuthConfig Limit Indexes
这里的关键是,AllowOverride决定了哪些指令可以被.htaccess文件覆盖。如果设为None,那.htaccess根本不会生效。
创建.htaccess文件
在你的网站根目录(比如/var/www/html)下,新建一个名为.htaccess的文件。注意,文件名开头的点是隐藏文件,在Linux下用ls -a才能看到它。
编辑.htaccess文件
用文本编辑器打开这个文件,然后开始加规则。下面是一些常见的配置示例,几乎每个站点都可能用到。
重写URL
RewriteEngine On
RewriteRule ^article/([0-9]+)/([_0-9a-z-]+)$ article.php?id=$1&title=$2 [L]
这个规则会把/article/123/some-article-title这样的URL,静默地重写为/article.php?id=123&title=some-article-title。对搜索引擎和用户都很友好。
设置默认文档
DirectoryIndex index.html index.php
告诉Apache,访问目录时优先显示哪个文件。顺序很重要,先找到谁就用谁。
禁止访问特定文件或目录
Order allow,deny
Deny from all
Require all denied
这组规则会阻挡对config.php文件和/var/www/html/secret目录的访问。安全防护的基本功。
设置缓存控制
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-ja vascript "access plus 1 month"
ExpiresByType application/x-shockwa ve-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
通过设置浏览器缓存过期时间,可以显著提升网站加载速度。不同类型的资源,缓存策略也不同。
重启Apache服务器
每次修改.htaccess文件后,都得让Apache重新加载配置才能生效。命令很简单:
sudo systemctl restart apache2
或者,如果你不想完全重启,也可以用sudo systemctl reload apache2,这样更温和。
注意事项
- .htaccess文件的配置优先级,高于主配置文件中的相同配置。这意味着,如果在主配置里设置了某个规则,但.htaccess里有不同的规则,那么.htaccess会覆盖主配置。
- 不要滥用.htaccess。它虽然方便,但每次请求都要额外解析这个文件,会拖慢服务器性能。而且,配置多了容易冲突,出了问题排查起来也比较头疼。
- 语法一定要正确。一个简单的拼写错误,就可能让整个站点返回500错误。所以,改完文件后,最好先在本地检查一下。
掌握了这些,你就能在Apache2中灵活运用.htaccess文件,对网站进行精细化管理了。