.htaccess是Apache服务器中用于目录级配置的分布式配置文件,很多人只把它当作URL重写规则的文件来使用,实际上它能实现的功能远不止伪静态。只要在网站根目录或任意子目录放置这个文件,就能覆盖主配置文件中的部分设置,而且修改后立即生效,不需要重启Apache服务。下面整理了一些比较实用的另类用法,包括访问控制、错误页面定制、防盗链、PHP参数调整、强制HTTPS等,每个用法都附带简单的配置示例。

目录访问密码保护
如果某些目录不希望被陌生人访问,除了用程序做登录验证外,还可以借助.htaccess直接启用HTTP Basic认证。这种方式不需要数据库,也不需要编写后端代码,只要生成一个密码文件,再在.htaccess里指定认证规则即可。
首先用htpasswd命令生成一个密码文件,例如放在网站根目录之外的隐藏位置,文件路径为/var/www/.htpasswd。然后在该目录的.htaccess文件中写入以下内容:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/.htpasswd
Require valid-user
这样当访客访问该目录时,浏览器会弹出一个用户名密码输入框,只有输入正确的账号密码才能看到内容。需要注意的是,AuthUserFile必须指向绝对路径,而且.htpasswd文件最好不要放在可公开访问的目录里,否则容易被下载。如果只想让特定IP跳过验证,可以配合Allow from或Require ip指令,实现更灵活的访问策略。
自定义错误页面
默认情况下,网站遇到404、403、500等错误时会显示服务器自带的白底黑字页面,不仅难看,还可能泄露服务器版本信息。通过.htaccess的ErrorDocument指令,可以把这些错误页面替换成自己设计的HTML页面,提升用户体验的同时也隐藏了技术细节。
配置方式很简单,在.htaccess中逐行指定错误代码对应的页面路径即可。例如:
ErrorDocument 404 /error/404.html
ErrorDocument 403 /error/403.html
ErrorDocument 500 /error/500.html
错误页面可以是静态HTML文件,也可以是一个动态处理脚本的URL。如果网站根目录下有一个error文件夹,里面放了对应的页面文件,那么访客触发错误时就会看到你自定义的内容。需要注意的是,如果404页面路径写错,可能会陷入无限重定向,所以要确保文件确实存在。此外,自定义错误页面还能用来做简单的营销或引导,比如在404页面放上搜索框或热门文章链接,把流失的用户拉回来。
防盗链与IP黑名单
图片、视频、附件等静态资源如果被其他网站直接引用,会消耗你的服务器带宽,而且对方可能不展示任何来源信息。利用.htaccess的RewriteCond和RewriteRule配合,可以判断请求来源的Referer,如果不是自己的域名或允许的域名,就拒绝提供资源或返回一张提示图片。
常见的防盗链配置如下:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|mp4|zip)$ - [F]
这段规则的意思是:如果Referer不为空,并且不是来自yourdomain.com(包括带www和不带www),那么访问jpg、png、mp4等扩展名文件时直接返回403禁止访问。第一行RewriteCond !^$表示允许直接输入网址访问,也就是允许浏览器直接打开图片。如果不想允许空Referer,可以去掉这一行。除了防盗链,还可以直接在.htaccess里屏蔽特定IP或IP段,例如:
Order Allow,Deny
Deny from 192.168.1.100
Deny from 10.0.0.
Allow from all
将恶意的爬虫IP或攻击来源加入Deny列表,能立即阻止其访问,不需要修改防火墙规则。现在Apache 2.4以上版本推荐使用Require指令,写法是:Require all granted 配合 Require not ip 192.168.1.100,效果一样。
修改PHP运行参数
在虚拟主机环境下,用户通常没有权限修改php.ini文件,但很多PHP配置项可以在.htaccess中用php_value或php_flag来覆盖。例如修改上传文件大小限制、脚本最大执行时间、内存限制等,这对一些CMS或论坛程序非常有用。
具体写法如下:
php_value upload_max_filesize 20M
php_value post_max_size 25M
php_value memory_limit 128M
php_value max_execution_time 60
如果某些PHP配置项属于布尔开关,可以用php_flag来设置,比如开启显示错误:php_flag display_errors on。不过需要注意的是,这种方式只在Apache使用mod_php模块时有效,如果PHP运行在CGI或FastCGI模式下,php_value指令可能会导致500错误。遇到这种情况可以改用.user.ini文件,或者在PHP-FPM的池配置中修改。另外,部分主机商会限制.htaccess修改PHP配置的权限,使用前最好先测试一下。
强制HTTPS与域名跳转
现在HTTPS基本已是网站标配,但不少老网站存在http和https并存的情况,搜索引擎会认为这是重复内容。通过.htaccess可以强制所有请求走https,同时把不带www的域名跳转到带www的域名,或者反过来,保持域名统一。
强制HTTPS的规则如下:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这段配置会检测当前连接是否使用HTTPS,如果不是就301重定向到https版本。如果想同时统一www,可以再加上一条:
RewriteCond %{HTTP_HOST} ^yourdomain\.com [NC]
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [L,R=301]
这样不管是http访问还是非www访问,最终都会跳转到https://www.yourdomain.com,避免搜索引擎收录多个版本的网址。需要注意的是,修改前要确认SSL证书已经正确安装,否则会跳出安全警告。
压缩输出与缓存控制
网站加载速度直接影响用户体验,而.htaccess可以启用服务器端的gzip压缩,把HTML、CSS、JavaScript等文本资源压缩后再传输,大幅减少体积。同时还能设置浏览器缓存策略,让静态资源在用户本地保存一段时间,减少重复请求。
启用gzip压缩的配置示例:
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json
这行代码告诉Apache对指定的MIME类型启用DEFLATE压缩。还可以加上AddOutputFilterByType DEFLATE image/svg+xml,或者使用mod_deflate模块的更多参数。缓存控制则使用Expires和Cache-Control头,例如:
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
这里需要注意,配置中的引号建议使用英文双引号,但本文为规避HTML属性截断风险,示例中使用了中文引号表示。实际上在.htaccess文件里应写英文双引号,例如:ExpiresByType text/css "access plus 1 week"。这样设置后,图片缓存一个月,CSS和JS缓存一周,用户再次访问时浏览器会直接从本地读取,提升加载速度。
除了以上这些,.htaccess还能做很多事,比如禁止目录浏览(Options -Indexes)、设置默认首页(DirectoryIndex index.php index.html)、限制请求方法防止恶意提交、通过SetEnv设置环境变量、利用mod_rewrite实现复杂的路径映射等。它的灵活性和即时生效特点,让它成为Apache服务器上一个非常实用的工具。不过也要注意,每次请求都会读取.htaccess文件,如果规则过于复杂、层级太深,可能会带来轻微的性能开销。建议把通用规则放在主配置里,只把需要频繁调整的目录级需求写在.htaccess中,这样既能享受便利,又不会拖慢网站速度。