.htaccess

.htaccess 是一个分布式配置文件,Apache 通过它按目录基础处理配置更改。

WordPress 使用此文件来操控 Apache 如何从其根目录及其子目录中提供文件。最值得注意的是,WP 修改此文件以能够处理漂亮的固定链接(pretty permalinks)。

此页面可用于修复损坏的 .htaccess 文件(例如由行为不当的插件引起)。

基本 WP

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

多站点

WordPress 3.5 及以上版本

如果您在 WordPress 3.5 或更高版本上激活了 Multisite,请使用以下其中之一。

WordPress >=3.5 子文件夹示例
# BEGIN WordPress Multisite
# Using subfolder network type: https://wordpress.org/documentation/article/htaccess/#multisite

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

# END WordPress Multisite
WordPress >=3.5 子域名示例
# BEGIN WordPress Multisite
# Using subdomain network type: https://wordpress.org/documentation/article/htaccess/#multisite

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# END WordPress Multisite

WordPress 3.4 及以下版本

如果您最初安装的是 3.4 或更早版本的 WordPress 并在此时激活了 Multisite,则需要使用以下其中之一:

WordPress <=3.4 子文件夹示例

WordPress 3.0 至 3.4.2

# BEGIN WordPress Multisite
# Using subfolder network type: https://wordpress.org/documentation/article/htaccess/#multisite

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# END WordPress Multisite
WordPress <=3.4 子域名示例
# BEGIN WordPress Multisite
# Using subdomain network type: https://wordpress.org/documentation/article/htaccess/#multisite

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]

# END WordPress Multisite

通用示例

选项

任何以 + 开头的选项将添加到当前生效的选项中,而任何以 – 开头的选项将从当前生效的选项中移除。

Options 指令 的可能值是以下任意组合:

None

关闭所有选项。

All

除 MultiViews 外的所有选项。这是默认设置。

ExecCGI

允许使用 mod_cgi 执行 CGI 脚本。

FollowSymLinks

服务器将跟随此目录中的符号链接。

Includes

允许使用 mod_include 提供的服务器端包含。

IncludesNOEXEC

允许服务器端包含,但禁用 #exec cmd 和 #exec cgi。

Indexes

如果 URL 映射到目录且没有 DirectoryIndex,则显示目录的格式化列表。

MultiViews

允许使用 mod_negotiation 进行内容协商的"MultiViews"。

SymLinksIfOwnerMatch

仅当目标与链接拥有相同的用户 ID 时才跟随符号链接。

这将禁用所有选项,然后仅启用 FollowSymLinks,这对于 mod_rewrite 是必需的。

Options None
Options FollowSymLinks

DirectoryIndex

DirectoryIndex 指令 设置当请求目录时 Apache 将提供的文件。

可以给出多个 URL,在这种情况下,服务器将返回它找到的第一个。

DirectoryIndex index.php index.html /index.php

DefaultLanguage

DefaultLanguage 指令 将使所有尚未关联特定语言标签的文件使用此设置。

DefaultLanguage en

默认字符集

设置 HTTP 标头中发送的默认字符编码。请参阅 在 .htaccess 中设置字符集信息

AddDefaultCharset UTF-8

为特定文件设置字符集

AddType 'text/html; charset=UTF-8' .html

为特定文件设置

AddCharset UTF-8 .html

ServerSignature

ServerSignature 指令 允许配置服务器生成文档下的尾部页脚行。可选地在服务器生成的页面(内部错误文档、FTP 目录列表、mod_status 和 mod_info 输出等,但不包括 CGI 生成的文档或自定义错误文档)中添加一行包含服务器版本号和虚拟主机名称的行。

On

添加一行,其中包含服务器版本号和服务虚拟主机的 ServerName

Off

抑制页脚行

Email

创建对引用文档的 ServerAdmin 的"mailto:"引用

SetEnv SERVER_ADMIN admin@site.com
ServerSignature Email

强制下载文件

以下内容将导致任何请求以指定扩展名结尾的文件不会在浏览器中显示,而是强制弹出“另存为”对话框,以便客户端可以下载。

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

HTTP 压缩

AddOutputFilter 指令 将文件名扩展名映射到将在响应发送给客户端之前处理服务器响应的过滤器。这除了在其他地方定义的过滤器之外,还包括 SetOutputFilter 和 AddOutputFilterByType。此映射会合并到任何已生效的映射之上,覆盖同一扩展名的任何现有映射。

另请参阅 启用压缩

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

强制对某些文件进行压缩

SetOutputFilter DEFLATE

发送自定义 HTTP 标头

Header 指令 允许您为每个请求或仅特定文件发送 HTTP 标头。您可以使用 Firebug、Chrome Dev Tools、Wireshark 或 高级 HTTP 请求/响应标头工具 查看站点的 HTTP 标头。

Header set X-Pingback "https://example.com/xmlrpc.php"
Header set Content-Language "en-US"

取消设置 HTTP 标头

这将取消设置 HTTP 标头,使用 always 将尽最大努力移除它们。

Header unset Pragma
Header always unset WP-Super-Cache
Header always unset X-Pingback

密码保护登录

这对于保护 wp-login.php 文件非常有用。您可以使用此 高级 Htpasswd/Htdigest 文件创建器。

基本身份验证

AuthType Basic
AuthName "Password Protected"
AuthUserFile /full/absolute/path/to/.htpasswd
Require valid-user
Satisfy All

摘要身份验证

AuthType Digest
AuthName "Password Protected"
AuthDigestDomain /wp-login.php https://example.com/wp-login.php
AuthUserFile /full/absolute/path/to/.htpasswd
Require valid-user
Satisfy All

要求特定 IP

这是一种仅允许访问列出的 IP 地址的方法。注意此处使用的是 RequireAny 而不是 RequireAll。

<RequireAny>
  Require ip 192.0.2.123
  Require ip 2001:0DB8:1111:2222:3333:4444:5555:6666
</RequireAny>

保护敏感文件

这将拒绝对您 wp-config 文件、htaccess/htpasswd 和 WordPress debug.log 的所有 Web 访问。在安装后的站点上,建议也将 install.php 添加进去。

<FilesMatch "^(wp-config\.php|\.htaccess|\.htpasswd|debug\.log)$">
  Require all denied
</FilesMatch>

要求 SSL

这将强制使用 SSL,并要求确切的主机名,否则将重定向到 SSL 版本。适用于 /wp-admin/.htaccess 文件。

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.example.com"
ErrorDocument 403 https://www.example.com

外部资源

另见