在 Apache Web 服务器环境中,.htaccess(全名为 Hypertext Access,超文字访问) 是最具威力的目录级设定档。它允许网站管理者在无需直接修改服务器全域核心设定档(如 httpd.conf)的情况下,针对特定资料夹及其所有子目录自订访问规则、路径重新导向与安全存取权限。

文件名称开头的「点(.)」符号,代表它在 Unix/Linux 系统中属于隐藏文件。任何一个运行在 Apache 上的 WordPress 网站,都必须仰赖一份正确且健全的 .htaccess 才能让固定网址(Permalinks)正常解析。

然而,除了最基础的页面转址,一份优秀的 .htaccess 更是强化网站资安防线、抵御恶意探测、以及开启浏览器静态缓存以大幅提升 Google PageSpeed 分数的关键秘密武器。本文将常用且强大的设定范例汇整如下,供广大 WordPress 站长与运维人员直接参考取用。


一、WordPress 官方标准核心重写规则(mod_rewrite)

这是每个全新安装的 WordPress 必备的基础核心骨架。它的主要功能是将所有非实体存在的文件或目录请求,自动重写导向至根目录的 index.php,以实现自订的语意化固定网址:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

二、强制将 HTTP 流量 301 永久重新导向至 HTTPS

当你的网站安装了 SSL 安全凭证后,请务必在 .htaccess 最顶端加入以下规则,确保所有输入 http:// 的访客与搜寻引擎爬虫,皆会自动跳转至加密的 https:// 安全网址:

# 强制 HTTP 转 HTTPS (301 Redirect)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Web 服务器安全与 SSL 凭证组态配置


三、网站安全加固:阻挡机敏文件存取与防火墙规则

黑帽骇客经常使用自动化扫描脚本探测你的服务器设定档或尝试绕过 PHP 安全限制。透过 .htaccess 能在请求抵达 PHP 之前就直接由 Apache 予以拦截拒绝。

1. 禁止外部存取 PHP 初始化档(.user.ini)与 Wordfence WAF

知名安全外挂 Wordfence 会在系统建立 .user.ini 进行防火墙前置载入,必须严禁外部访客直接下载:

# BEGIN Wordfence WAF
<Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
# END Wordfence WAF

2. 禁止外部直接执行外挂目录内的恶意脚本(以 Akismet 为例)

黑客往往利用外挂目录的未授权 PHP 脚本进行提权或植入木马。我们可以在特定外挂目录(或全局 wp-content/plugins)下设定白名单,只允许浏览器读取 CSS、JS 与图片,全面阻断任何 PHP 文件的直接执行:

# 仅允许存取公开的前端静态资源,禁止执行其它危险脚本
<IfModule !mod_authz_core.c>
    Order Deny,Allow
    Deny from all
</IfModule>
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# 白名单放行合法的 JS 与 CSS
<FilesMatch "^(form\.js|akismet\.js|akismet\.css)$">
    <IfModule !mod_authz_core.c>
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</FilesMatch>

# 白名单放行图片
<FilesMatch "^(logo-full-2x\.png)$">
    <IfModule !mod_authz_core.c>
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</FilesMatch>

四、效能飞跃:停用 ETag、开启持久连线与静态缓存

要让网页秒开、降低主机负载并在 Google PageSpeed Insights 获得高分,缓存标头的设定至关重要。

1. 停用 ETag 与保持连线(Keep-Alive)

在分散式服务器或反向代理架构下,默认的 ETag 标头容易因服务器节点不同而导致缓存失效。停用 ETag 能有效提升缓存命中率:

# Disable ETags & Enable Keep-Alive
<IfModule mod_headers.c>
    Header unset ETag
    Header set Connection keep-alive
</IfModule>
FileETag None

2. 设定 Expires Headers(浏览器缓存过期机制)

透过 mod_expires 模组,明确告知访客浏览器在特定天数内直接从本机缓存读取静态资源,无需反复向服务器发出请求:

# BEGIN Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 5 seconds"
    ExpiresByType text/html "access plus 600 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 216000 seconds"
    ExpiresByType application/javascript "access plus 216000 seconds"
    ExpiresByType application/x-javascript "access plus 216000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType image/svg+xml "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType font/truetype "access plus 2592000 seconds"
    ExpiresByType font/opentype "access plus 2592000 seconds"
</IfModule>
# END Expire headers

3. 设定 Cache-Control Headers

搭配 Cache-Control 标头,精准控制公有与私有缓存原则:

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    # 图片、字型与媒体文件设定为公开缓存 (Public)
    <filesMatch "\.(ico|jpe?g|png|gif|swf|woff2?)$">
        Header set Cache-Control "public, max-age=2592000"
    </filesMatch>
    # CSS 与 JS 文件
    <filesMatch "\.(css|js)$">
        Header set Cache-Control "public, max-age=604800"
    </filesMatch>
    # HTML 与 PHP 动态文件设定为私有并强制重新验证
    <filesMatch "\.(x?html?|php)$">
        Header set Cache-Control "private, must-revalidate"
    </filesMatch>
</IfModule>
# END Cache-Control Headers

五、服务器重启与语法检查指令

完成 .htaccess 编辑后,请切记在终端机中测试组态语法是否正确,避免因单一拼字错误导致全站抛出「500 Internal Server Error」:

# 检查 Apache 设定档语法 (Ubuntu / Debian)
sudo apache2ctl configtest

# 重启 Apache 服务器
sudo systemctl restart apache2

# 若使用 Bitnami 架构环境:
sudo /opt/bitnami/ctlscript.sh restart apache

结语:用好 .htaccess,为网站打下扎实地基

许多站长习惯依赖五花八门的缓存与安全外挂,却忽略了每多装一个外挂就会多消耗一份服务器内存。

充分善用 Apache 底层的 .htaccess 规则,能在最轻量、最接近作业系统核心的层级,以最零成本的方式完成强制转址、恶意拦截与极速缓存。花点时间调校好你的 .htaccess,你的 WordPress 网站就能兼顾极致速度与铜墙铁壁般的安全保障!

✦ 独立报道 · 读者支持 ✦

以实际行动支持独立观点,与我们一同走得更远

每一篇条理清晰的分析、每一次不随波逐流的观察,背后都是对真实与品质的坚持。我们拒绝内容农场与算法流量绑架,坚持自由独立的客观发声。

维持高品质的原创写作与独立运营,需要持续的实质力量。您可以选择一次性赞助或每月定期支持,通过 Google 安全结账,与我们一同守护这份深刻与清醒。

由 Google 安全处理付款 · 可随时在 Google 账户管理或取消

标签WordPress.htaccessApacheHTTPS转址网站安全浏览器缓存WordfenceSEO优化