配置 Apache 的 mod_rewrite 模块以实现 WordPress 固定链接(伪静态)功能,主要包含三个核心步骤:启用模块、授权目录权限以及配置重写规则。以下是基于 Linux(Debian/Ubuntu 和 CentOS/RHEL)及 Windows 环境的详细配置指南。
! { f! P- i" }
. O: X5 j0 R ?9 E; X1. 启用 mod_rewrite 模块) B2 g$ e% v6 T- E) U1 O& n
首先必须确保 Apache 已加载 mod_rewrite 模块。不同操作系统的操作方式略有不同。
/ I6 X; }! S4 }* v2 M# L: i
$ e! [" G# j6 @" g @Debian / Ubuntu 系统
, V: ^: _: y$ I& w- k9 f1 G6 C在终端中执行以下命令启用模块并重启服务:: o1 z0 o# {& F1 L: i) A/ k
0 n, }: i/ k& r0 L+ `' j9 R
bash7 G: f W/ v M' U$ v& A
sudo a2enmod rewrite
{3 p# a+ [) G, N' J2 vsudo systemctl restart apache2* h! Z$ |6 Q% `' Q: K
验证是否生效: 运行 apache2ctl -M | grep rewrite,若输出 rewrite_module (shared) 则表示成功。
, G" {1 _0 K0 @; |- Z3 a8 q% ^, R
CentOS / RHEL 系统: c1 ~) ]% h/ }: y
编辑主配置文件 /etc/httpd/conf/httpd.conf,找到以下行并确保其未被注释(即去掉行首的 #):
, m# [: O5 C; ]! Z2 P" e0 |3 W
g* A% t, D. d$ u: s% Napache* l1 ~# f! N: B4 P1 `
LoadModule rewrite_module modules/mod_rewrite.so& Q! {8 H; j/ X( A* b! h% h# f! p
保存后重启服务:
. c9 t3 p! n4 f0 S1 k
3 \9 P( E3 I Rbash( V- f1 N$ H2 d3 T. z+ l
sudo systemctl restart httpd
/ k x0 I1 I9 D! ] }1 [验证是否生效: 运行 httpd -M | grep rewrite。! H8 }% q7 |9 K4 R, }2 O% b% g
1 L, ~0 W- z, V! y1 l* \+ \5 ~
Windows (XAMPP/WAMP)
6 x7 C: }% L3 @ w. I4 J; z8 W( W8 [打开 Apache 安装目录下的 conf/httpd.conf文件,搜索 LoadModule rewrite_module,去掉行首的 #` 号,然后重启 Apache 服务。
9 B6 p c/ I$ F' S/ O
! I: d, T5 ^! \: }0 {( `, ^3 V2. 配置目录权限 (AllowOverride): q2 b( l" U* v4 t. m( B
即使模块已启用,Apache 默认通常禁止通过 .htaccess 文件进行 URL 重写。你需要修改 Apache 配置文件,允许特定目录覆盖默认设置。) F0 h; q3 [! S" z' l' R
0 o0 d$ b. N8 n2 v G& D
查找配置文件( ^( u6 B& H5 w! D# Y
Debian/Ubuntu: 通常位于 /etc/apache2/apache2.conf 或 /etc/apache2/sites-available/000-default.conf。" |0 {7 y v( C1 f' [5 g& m
CentOS/RHEL: 通常位于 /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/ 下的虚拟主机配置文件。
6 y- F. E. d/ q7 a6 XWindows: 位于 httpd.conf 或 httpd-vhosts.conf。
: S2 m4 V% j& l, b6 `1 a修改 Directory 指令* T1 _9 U$ @3 z5 I3 [5 J/ O
找到指向你 WordPress 根目录的 <Directory> 块,将 AllowOverride 的值从 None 改为 All。7 L* d) }/ ^8 k! q8 p( U4 T
- H% w$ D7 C* v示例配置:+ o- `$ d+ S& R @, [8 q4 b, V- X
, Z6 g: ~ s8 ?apache5 F: Q, r) c3 r y3 g5 i4 C$ }
<Directory /var/www/html>
2 v' X% F1 G9 d: b Options Indexes FollowSymLinks$ p& s' m! g6 G. \; K: @/ |4 ]9 ]
AllowOverride All
! b8 f/ M( v7 _4 {9 S1 C Require all granted
+ D- d" s% Q9 V$ d& ^) L</Directory>0 \" R% z1 o2 p O
注意:
8 \# a8 C$ ~8 T1 v" o( ^5 p! O+ l! Q7 B. _3 v# T
Options 中建议包含 FollowSymLinks,否则某些重写规则可能报错。
3 G! p0 [0 F8 s I. |修改完成后,必须重启 Apache 服务才能生效。
, | T4 I/ b! z* p3. 配置重写规则 (.htaccess)
Q0 o2 E8 c1 f/ k- [: Z. O# y当服务器端配置完成后,WordPress 需要具体的重写规则来将“美观链接”映射到 index.php。) ]0 B' U, i0 p/ I0 L6 }
4 d& l' V' B: P' m
方法一:让 WordPress 自动生成(推荐)
: S4 M& m4 K- B5 x- Y" Z登录 WordPress 后台。
+ t- ]/ y. X( {8 Z进入 设置 (Settings) > 固定链接 (Permalinks)。8 e' Z) |% } U7 z* w; y8 K
选择你想要的结构(如“文章名”),点击 保存更改。
" p: [0 E+ r0 LWordPress 会尝试自动写入根目录下的 .htaccess 文件。如果提示成功,则配置完成。% C$ a8 g6 s/ J# k& W8 s+ H
方法二:手动创建 .htaccess, V; ?: `% H" s3 R
如果 WordPress 提示无法写入文件(通常是因为权限问题),你需要手动创建或编辑网站根目录下的 .htaccess 文件,并填入以下标准 WordPress 重写规则:
1 H8 L* p% j. O" n" U2 l+ v/ p) ?( ~9 t3 k J& a7 _
apache
9 A+ p7 {5 r) w$ t1 B* D# BEGIN WordPress+ E; t5 _+ ?1 {
<IfModule mod_rewrite.c>, `' ]1 i' \* v! E: N
RewriteEngine On
" y# t+ a8 G$ [& D$ }# pRewriteRule ^index\.php$ - [L]
2 J1 C4 o/ z5 y! h& _9 \" w# pRewriteCond %{REQUEST_FILENAME} !-f l4 K) c0 L7 |7 P0 |2 l$ W
RewriteCond %{REQUEST_FILENAME} !-d
) |6 P+ [; N/ KRewriteRule . /index.php [L]
0 A. k6 W, t6 r. M% B! I7 j; q</IfModule> g* n5 b w! {5 b
# END WordPress
$ Y0 D. }: U- k关键说明:0 `5 p1 n# {, \5 _" a M9 d
+ ]. U3 k1 Q* Y2 F. t
RewriteEngine On: 开启重写引擎。 ~, E \+ Y( D! Q$ l# J+ Q
RewriteCond %{REQUEST_FILENAME} !-f: 如果请求的不是真实存在的文件。0 I" J+ k: D$ ] d3 x9 O
RewriteCond %{REQUEST_FILENAME} !-d: 且请求的不是真实存在的目录。- ?7 `" s3 x6 ~4 C0 K$ n
RewriteRule . /index.php [L]: 则将请求内部重定向到 index.php 处理。2 A5 w8 K, D9 z3 p3 \* }
4. 常见问题排查
) N) Z, o i: j% J; k如果配置后仍然出现 404 错误,请检查以下几点:
, a5 {9 H4 y3 [- h) c6 T: F3 d) `( M+ @5 J# J) W1 B4 _ x+ L
缓存问题:清除浏览器缓存、WordPress 插件缓存(如 WP Rocket, W3 Total Cache)以及 CDN(如 Cloudflare)缓存。
. L$ O" q) X5 a0 j文件权限:确保 .htaccess 文件对 Web 服务器用户(如 www-data 或 apache)可读。通常权限设置为 644 即可。
# c+ m! w1 M" k. U" ]配置层级冲突:如果你在虚拟主机配置 (VirtualHost) 中直接写了重写规则,请确保没有与 .htaccess 中的规则冲突。建议在虚拟主机中设置 AllowOverride None 并直接管理规则,或者保持 AllowOverride All 并使用 .htaccess。; K% A) p1 N: \$ c
中文链接问题:如果文章标题包含中文,部分旧版服务器或配置可能导致解析错误。可以考虑使用插件将固定链接转换为拼音,或确保服务器字符集配置正确。
; A" r: z# C+ o4 k9 ]+ U' K7 ~完成以上步骤后,你的 WordPress 网站应该能够正常识别不带 /index.php 的美观固定链接了。
; Y+ ~1 `1 d% J# Y* G2 P( K8 j) y6 V& l2 a/ s" ]$ p+ {
9 d P* K0 Z( m5 \参考 |