目录
.htaccess 是什么?
.htaccess(读作 dot htaccess)是 Apache Web 服务器的目录级配置文件,让您无需修改主服务器配置即可控制网站行为,包括重定向、URL 重写、IP 封锁和自定义错误页面等。
.htaccess 的关键优势在于它只影响所在目录(及其所有子目录),因此共享主机上的每个域名或子域名都可以拥有独立的配置。
注意:.htaccess 在 Unix/Linux 系统中是隐藏文件,因为文件名以点(.)开头。您需要在 FTP 客户端或文件管理器中启用"显示隐藏文件"才能看到它。
在 DirectAdmin 中找到 .htaccess
在 AsiaGB 的 DirectAdmin 主机上,主要的 .htaccess 文件位于:
public_html/.htaccess
有两种主要的编辑方式:
| 方式 | 步骤 | 适合情况 |
|---|---|---|
| 文件管理器 | DirectAdmin → Files → File Manager → public_html | 无需 FTP 的快速编辑 |
| FTP 客户端 | 通过 FTP 连接,启用显示隐藏文件,编辑 public_html/.htaccess | 同时编辑多个文件 |
| SSH | nano ~/public_html/.htaccess | 高级用户 |
警告:修改 .htaccess 前务必备份原始文件。哪怕一个字符的语法错误,也可能立即导致整个网站出现 Error 500。
常用指令
.htaccess 使用 Apache 专用语法。以下是最常用的指令:
| 指令 | 用途 |
|---|---|
Options | 设置目录选项,如 -Indexes 禁用目录列表 |
RewriteEngine | 启用/禁用 mod_rewrite |
RewriteRule | 定义 URL 重写规则 |
RewriteCond | RewriteRule 前的条件判断 |
Redirect | 将一个 URL 重定向到另一个 |
ErrorDocument | 指定自定义错误页面 |
php_value | 为该目录设置 PHP 配置值 |
deny from | 封锁特定 IP 地址 |
提示:以 # 开头的行是注释,不影响运行。可自由用于记录规则说明。
重定向和 URL 重写
重定向将访客从旧 URL 引导至新 URL,主要分两类:
301 永久重定向(推荐用于 SEO)
# 重定向单个页面
Redirect 301 /old-page.html https://example.com/new-page.html
# 将旧域名重定向到新域名
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
302 临时重定向
Redirect 302 /promo.html https://example.com/sale.html
URL 重写(伪静态)
WordPress、Laravel 等 CMS 使用 RewriteRule 实现简洁 URL:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
强制 HTTPS
每个网站都应强制使用 HTTPS,有助于安全性和 SEO。在 .htaccess 中添加:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
注意:强制 HTTPS 前需先安装 SSL 证书——AsiaGB 所有主机套餐均附赠免费 SSL。
强制 www 或非 www
# 强制非 www(推荐)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# 或强制 www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
封锁 IP
封锁消耗过多带宽的恶意 IP(如爬虫):
# 封锁单个 IP
deny from 192.168.1.100
# 封锁多个 IP
deny from 192.168.1.100
deny from 10.0.0.5
deny from 172.16.0.0/24
# 只允许特定 IP(适用于管理后台)
order deny,allow
deny from all
allow from 203.0.113.0
禁用目录列表
Options -Indexes
防止图片盗链
盗链是指其他网站直接引用您的图片 URL,消耗您的带宽:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]
将 yourdomain.com 替换为您的实际域名。
自定义错误页面
用自定义页面替换 Apache 默认的错误页面:
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html
通过 .htaccess 设置 PHP
无需修改主 php.ini,即可为特定目录覆盖 PHP 配置值:
# 增加上传限制
php_value upload_max_filesize 64M
php_value post_max_size 64M
# 增加内存
php_value memory_limit 256M
# 增加执行时间
php_value max_execution_time 300
# 显示错误(仅用于开发环境,生产环境禁止)
php_flag display_errors on
警告:切勿在生产网站上开启 display_errors,这可能向访客暴露敏感服务器信息。
目录密码保护
用用户名和密码限制目录访问:
AuthType Basic
AuthName "Protected Area"
AuthUserFile /home/username/public_html/.htpasswd
Require valid-user
通过 SSH 创建 .htpasswd 文件:
htpasswd -c /home/username/public_html/.htpasswd myusername
缓存控制
设置浏览器缓存头,加快回访用户的页面加载速度:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/html "access plus 1 hour"
</IfModule>
解决 .htaccess 导致的 Error 500
当 .htaccess 导致 Error 500 时,常见原因如下:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 编辑后立即出现 Error 500 | 指令语法错误 | 逐行注释掉(#)最近添加的内容,直到网站恢复 |
| 重定向循环 | 重定向逻辑出现环路 | 检查 RewriteCond 是否有正确的排除条件 |
| RewriteRule 不生效 | 缺少 RewriteEngine On | 在所有 RewriteRule 前添加 RewriteEngine On |
| php_value 无效 | PHP 以 CGI 模式运行 | 改用 .user.ini(部分主机环境) |
提示:查看 DirectAdmin → Logs → Error Logs,可获取 .htaccess 错误的详细信息。
常见问题
.htaccess 是什么?
.htaccess 是 Apache Web 服务器的目录级配置文件,允许控制重定向、URL 重写、IP 封锁和自定义错误页面,无需修改主服务器配置。
.htaccess 在 DirectAdmin 中在哪里?
在 DirectAdmin 中,.htaccess 位于 public_html/ 目录下。通过文件管理器或 FTP 访问时,需启用"显示隐藏文件"选项,因为文件名以点开头。
编辑 .htaccess 后出现 Error 500 怎么办?
Error 500 几乎总是语法错误引起的。逐行注释掉(#)最近添加的内容,直到网站恢复,然后找出错误指令。也可查看 DirectAdmin 错误日志获取详情。
如何用 .htaccess 设置 301 重定向?
使用 Redirect 301 /old-page.html https://example.com/new-page.html 进行简单重定向,或使用带 [R=301,L] 标志的 RewriteRule 进行模式匹配重定向。301 是永久重定向,会将 SEO 权重传递给新 URL。
可以用 .htaccess 强制 HTTPS 吗?
可以,添加 RewriteEngine On、RewriteCond %{HTTPS} off、RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]。需要先安装 SSL 证书——AsiaGB 所有主机套餐均附赠免费 SSL。
如何用 .htaccess 防止图片盗链?
使用 RewriteCond 检查 HTTP_REFERER,然后用 [F] 标志封锁。这样可防止其他网站直接嵌入您的图片 URL,避免消耗您的带宽。
总结:.htaccess 是 Apache 主机上的强大工具,无需服务器管理员权限即可控制网站行为——从重定向、强制 HTTPS 到封锁 IP 和防止盗链,全部集中在一个文件中。在 AsiaGB DirectAdmin 主机上,您可以直接通过文件管理器即时编辑。每次修改两次备份,保持每月两次自动备份的良好习惯。