DirectAdmin 主机上的 .htaccess 文件

.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同时编辑多个文件
SSHnano ~/public_html/.htaccess高级用户

警告:修改 .htaccess 前务必备份原始文件。哪怕一个字符的语法错误,也可能立即导致整个网站出现 Error 500。

常用指令

.htaccess 使用 Apache 专用语法。以下是最常用的指令:

指令用途
Options设置目录选项,如 -Indexes 禁用目录列表
RewriteEngine启用/禁用 mod_rewrite
RewriteRule定义 URL 重写规则
RewriteCondRewriteRule 前的条件判断
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 主机上,您可以直接通过文件管理器即时编辑。每次修改两次备份,保持每月两次自动备份的良好习惯。