.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
抑制页脚行
创建对引用文档的 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
外部资源
- Apache HTTP Server 官方教程:.htaccess 文件
- Htaccess 指令快速参考
- Htaccess 教程
- Google PageSpeed for Developers
- Htaccess 愚蠢技巧
- 高级 Mod_Rewrite