每个网络主机用户应该知道的.htaccess命令

.htaccess(超文本访问)是一个小型配置文件,放置在您网站的文件夹中,直接向 Apache 网络服务器发出命令。它的优势在于让您能够更改网站行为而无需编辑主服务器配置或拥有 root 访问权限——使其成为共享主机用户的重要工具。本指南收集了最常用的 .htaccess 指令,从重定向和 IP 阻止到安全设置。

如何访问和编辑.htaccess

  1. 打开DirectAdmin中的文件管理器
  2. 导航到 public_html 文件夹
  3. 启用显示隐藏文件以使.htaccess可见
  4. 点击编辑修改它,或者如果文件不存在则创建新文件

301和302重定向

使用这些将访客从一个URL转发到另一个URL:

301永久重定向(SEO推荐):

Redirect 301 /old-page.html https://www.yourdomain.com/new-page/

302临时重定向

Redirect 302 /promo.html https://www.yourdomain.com/sale/

强制HTTPS

添加这些行以强制所有HTTP流量使用HTTPS:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

阻止不需要的IP地址

拒绝来自特定IP或IP范围的访问:

Order allow,deny

Deny from 192.168.1.1

Deny from 10.0.0.0/8

Allow from all

密码保护目录

用用户名和密码限制文件夹——适用于管理区域或测试站点:

AuthType Basic

AuthName "Protected Area"

AuthUserFile /home/username/.htpasswd

Require valid-user

缓存控制头

设置浏览器缓存以加速静态文件传输:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/jpeg "access plus 1 year"

ExpiresByType text/css "access plus 1 month"

ExpiresByType application/javascript "access plus 1 month"

</IfModule>

自定义错误页面

用您自己的页面替换Apache的默认错误页面:

ErrorDocument 404 /404.html

ErrorDocument 500 /500.html

按用途分类的即用型.htaccess代码片段

上面的部分逐行展示了指令。这里我们将最有用的命令分组成完整的复制粘贴块,您可以直接放入AsiaGB的Apache + DirectAdmin主机中。只需调整域名和路径以匹配您的网站。每个块独立工作,因此您可以使用一个或组合多个。

1. 一致强制www或非www

选择一个块,使每个URL指向单一的规范形式——这整合了SEO信号并防止内容重复:

# Force non-www (example.com)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

# Or force www (www.example.com)
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]

2. 使用HSTS强制HTTPS

在上面强制HTTPS部分的基础上,这将HTTPS重定向与HSTS头结合起来,让浏览器记住始终使用HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Tell browsers to use HTTPS for at least one year
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

3. 完整的自定义错误页面集

为每个常见状态码定义品牌错误页面,让用户保持品牌一致性并找到前进的方向:

ErrorDocument 400 /errors/400.html
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

4. 阻止IP、User-Agent和不需要的机器人

除了阻止单个IP之外,您还可以通过User-Agent阻止恶意机器人,以减少服务器负载和内容抓取:

# Block IPs and ranges (Apache 2.4 syntax)
<RequireAll>
  Require all granted
  Require not ip 192.168.1.50
  Require not ip 203.0.113.0/24
</RequireAll>

# Block bots by User-Agent name
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|MJ12bot|SemrushBot|DotBot) [NC]
RewriteRule .* - [F,L]

5. 保护敏感文件并禁用目录列表

隐藏敏感配置文件并关闭目录列表,使访客在没有索引页时永远看不到文件索引:

# Disable directory listing
Options -Indexes

# Block dotfiles and config files
<FilesMatch "^\.|\.(env|ini|log|sql|bak)$">
  Require all denied
</FilesMatch>

6. 设置缓存(Expires)和gzip压缩

这两个块能显著加速网站:Expires减少静态文件的重复下载,而gzip在发送给浏览器前压缩文本:

<IfModule mod_expires.c>
  ExpiresActive On
  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 day"
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css text/plain
  AddOutputFilterByType DEFLATE application/javascript application/json
</IfModule>

常见指令快速参考表

主要指令及其作用的摘要——在编辑文件时用作快速查阅,无需重新阅读整个指南:

指令 作用 所需模块
RewriteEngine On启用所有重写规则mod_rewrite
Redirect 301永久URL移动(SEO友好)mod_alias
RewriteRule按条件重写或重定向URLmod_rewrite
ErrorDocument设置自定义错误页面core
Options -Indexes禁用目录列表core
Require not ip阻止IP地址(Apache 2.4)mod_authz_core
ExpiresByType按文件类型设置缓存生存期mod_expires
AddOutputFilterByType DEFLATEgzip压缩输出mod_deflate
Header set添加HTTP头如HSTSmod_headers
AuthType Basic密码保护文件夹mod_auth_basic

规则顺序与常见陷阱

.htaccess中的规则不是随机应用的——它们遵循明确的顺序。理解这一点可以防止错误重定向、挂起和500错误。

规则顺序

Apache从上到下读取指令。对于mod_rewrite,以[L](Last)结尾的规则会立即停止处理剩余规则。将特定规则——如针对某一页面的重定向——放在宽泛规则(如强制HTTPS)之前,这样宽泛规则就不会先触发并遮蔽更具针对性的规则。

注意重定向循环

当您将强制HTTPS与www/非www处理结合使用时,条件不严格可能导致无限重定向循环,使浏览器停留在ERR_TOO_MANY_REDIRECTS。在重定向之前,始终使用RewriteCond检查当前状态——例如,在切换到HTTPS之前测试%{HTTPS} off

理解.htaccess导致的500错误

大多数500错误来自语法错误、引用服务器未启用的模块,或未关闭的<IfModule>块。将指令包裹在<IfModule ...>中可降低风险,因为当模块缺失时,Apache会简单地跳过其中的行,而不是导致整个网站崩溃。

缓存注意事项

更改Expires或缓存规则后,网站可能仍显示旧版本,因为浏览器在之前设置的生存期内缓存了文件。在隐身窗口中测试或进行强制刷新(Ctrl+F5),并记住将频繁更新的文件缓存太长时间会让用户看到过时的内容。

安全测试.htaccess

由于一行错误就可能导致整个网站崩溃,请使用低风险的测试流程。每次编辑生产文件时都遵循以下步骤:

  1. 始终先备份 — 在每次编辑前,在DirectAdmin的文件管理器中将.htaccess复制为.htaccess.bak
  2. 一次添加一个块 — 逐组添加规则并测试,而不是一次粘贴多个块,这样就能知道是哪个块导致了问题。
  3. 测试多个URL — 检查首页、HTTPS页面、www和非www形式以及404页面,确认一切按预期运行。
  4. 查看错误日志 — 如果网站返回500,DirectAdmin中的错误日志会显示Apache拒绝的行和原因,帮助快速找到故障。
  5. 出错时立即恢复 — 将文件重命名为.htaccess.off或从.htaccess.bak还原以先恢复网站,然后再排查问题。

如果不想手动输入规则,可以使用下面的免费htaccess生成器——只需几次点击即可生成重定向、gzip、缓存和安全指令。

重要提示: 编辑.htaccess后请立即测试网站。语法错误会导致即时HTTP 500错误。如果出现问题,在刚添加的行前加上#前缀注释掉,以隔离问题所在。

常见问题

.htaccess文件应该放在哪里?

将其放在您希望规则生效的文件夹中——通常是public_html。规则会影响该文件夹及其所有子文件夹。

编辑.htaccess后网站显示500错误——怎么办?

500错误通常意味着语法错误或不支持的指令。撤销最新更改,或临时重命名文件以确认.htaccess是原因所在。编辑前务必备份原文件。

.htaccess在每台网络服务器上都有效吗?

它仅适用于Apache——Nginx不读取.htaccess文件。AsiaGB主机使用Apache,因此完全支持.htaccess。

.htaccess规则是立即生效还是需要重启服务器?

保存文件后立即生效——无需重启Apache,因为Apache在每次请求时都会重新读取.htaccess。这正是它在共享主机上方便的原因,但这也意味着错误会立即影响访客,所以请仔细编辑。

使用很多.htaccess规则会让网站变慢吗?

由于Apache在每次请求时都会读取文件,确实有一点开销,但对于普通网站来说差异几乎微不足道。正确的缓存和gzip规则通常能带来远超读取开销的速度提升,因此完全值得使用。

我可以在DirectAdmin中编辑.htaccess还是需要FTP?

两者都可以。DirectAdmin中的文件管理器最方便,因为您可以在浏览器中直接编辑和保存——只需启用"显示隐藏文件"即可看到该文件。FTP/SFTP适合备份文件或上传您在本地准备好的版本。

需要完整支持.htaccess的主机服务?

AsiaGB主机支持Apache mod_rewrite和所有.htaccess指令——通过DirectAdmin轻松管理。

查看主机方案