博客 / WordPress/ WordPress 在 Nginx、LiteSpeed 与 Lighttpd 服务器下的 URL 重写规则详解

WordPress 在 Nginx、LiteSpeed 与 Lighttpd 服务器下的 URL 重写规则详解

WordPress 在 Nginx、LiteSpeed 与 Lighttpd 服务器下的 URL 重写规则详解

前言

为了让 WordPress 的固定链接(Permalinks)功能正常工作,需要在 Web 服务器中配置相应的 URL 重写规则。本文档将详细介绍在 Nginx、LiteSpeed 和 Lighttpd 三种主流服务器环境下,如何正确配置 WordPress 的重写规则。

1. Nginx 服务器配置

Nginx 的配置通常位于 nginx.conf 或其包含的站点配置文件中。WordPress 的重写规则需要放置在对应的 server 块内。

推荐配置

将以下规则添加到您的 WordPress 站点配置的 location / { ... } 块中:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

说明: 这是 Nginx 下处理 WordPress 重写的标准且高效的方法。try_files 指令会按顺序检查文件是否存在,若所有检查都失败,则将请求转发给 /index.php,并保留查询参数。

备选配置(旧式方法)

您可能还会见到使用 if 指令和 rewrite 的旧配置,但不如 try_files 高效,不推荐作为首选:

if (!-e $request_filename) {
    rewrite ^/(.*)$ /index.php?q=$1 last;
}

注意: 在 Nginx 中过度使用 if 指令可能存在性能问题,且第一个示例中的 rewrite . /index.php last; 规则过于宽泛,可能引发意外重写,因此不推荐。

2. LiteSpeed 服务器配置

LiteSpeed Web Server 高度兼容 Apache 的 .htaccess 文件。您可以直接将 Apache 的 Rewrite 规则用于 LiteSpeed。

标准 .htaccess 规则

在 WordPress 安装根目录下的 .htaccess 文件中,应包含以下规则:

RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

说明:

  • RewriteEngine On:开启重写引擎。
  • RewriteBase /:设置重写的基础路径为根目录。
  • RewriteRule ^index.php$ - [L]:如果请求已经是 index.php,则停止后续所有重写规则([L] 标志)。
  • RewriteCond:两个条件判断请求的文件(-f)或目录(-d)是否真实存在。如果不存在,则执行下面的 RewriteRule
  • RewriteRule . /index.php [L]:将所有非真实存在的文件/目录请求重写到 /index.php

通常,在 WordPress 后台“设置”->“固定链接”中点击保存后,会自动生成此文件。

3. Lighttpd 服务器配置

Lighttpd 的配置通常位于 lighttpd.conf 或通过 include 引入的配置片段中。规则需要添加到 url.rewrite-if-not-fileurl.rewrite-once 部分。

标准配置规则

将以下规则添加到您的 Lighttpd 配置文件中:

url.rewrite-if-not-file = (
    "^/(wp-(content|admin|includes).*)" => "$0",
    "^/(.*.(php|css|js|png|jpg|jpeg|gif|ico|xml))$" => "$0",
    "^/(sitemap.xml)$" => "$0",
    "^/(xmlrpc.php)$" => "$0",
    "^/(.*)$" => "/index.php/$1"
)

规则详解:

  • 第一行:保留对 WordPress 核心目录(wp-content, wp-admin, wp-includes)下所有文件的直接访问。
  • 第二行:保留对所有静态资源文件(如图片、样式表、脚本)的直接访问。
  • 第三、四行:保留对 sitemap.xmlxmlrpc.php 的直接访问。
  • 最后一行:将其余所有请求重写到 /index.php,并将原始路径作为参数传递。

修正说明: 原文中的规则 "^/(wp-. ).*/?" 存在语法错误且不完整,已修正为更精确和安全的匹配模式,避免错误地重写核心文件。

通用注意事项

  • 修改前备份: 在修改任何服务器配置文件之前,请务必备份原文件。
  • 重启服务: 修改 Nginx 或 Lighttpd 的主配置文件后,需要重启或重载服务才能使配置生效。修改 .htaccess 文件则无需重启 LiteSpeed/Apache。
  • 权限问题: 确保 .htaccess 文件可被 Web 服务器进程读取。
  • WordPress 设置: 确保在 WordPress 后台“设置”->“固定链接”中选择了除“朴素”以外的任何结构,这是启用重写功能的前提。

正确配置 URL 重写是 WordPress 站点正常运作的基础,请根据您的服务器环境选择对应的配置方法。

发表评论

您的邮箱不会公开。必填项已用 * 标注。