配置 Apache 的 mod_rewrite 模块以实现 WordPress 固定链接(伪静态)功能,主要包含三个核心步骤:启用模块、授权目录权限以及配置重写规则。以下是基于 Linux(Debian/Ubuntu 和 CentOS/RHEL)及 Windows 环境的详细配置指南。
6 |- I3 h& A- P% _$ c; b/ L. y
' ]: G& s d% b% c* D Q" s+ K1. 启用 mod_rewrite 模块9 h# y% t+ S. k& n
首先必须确保 Apache 已加载 mod_rewrite 模块。不同操作系统的操作方式略有不同。
# L0 w1 d/ c4 z' P% Q7 x% }! W$ Z. x6 x
Debian / Ubuntu 系统! D/ P% Q) @$ _6 r0 S3 U4 \: r
在终端中执行以下命令启用模块并重启服务:
) V8 ]9 s, Q l3 q w0 C
" B9 }! u. e: f- Mbash9 }3 Y" ]- t& E2 w; ]+ x
sudo a2enmod rewrite' O8 s W6 i! `" V ? x
sudo systemctl restart apache2/ V) H8 u. }) a }# c. C
验证是否生效: 运行 apache2ctl -M | grep rewrite,若输出 rewrite_module (shared) 则表示成功。' [% F' m e; _
/ A2 Q" V0 }) L+ o- \CentOS / RHEL 系统
- h# N; a- v& c8 n3 Z编辑主配置文件 /etc/httpd/conf/httpd.conf,找到以下行并确保其未被注释(即去掉行首的 #):
, R+ }7 \9 Z6 Z9 P% H: P* a% L' d5 V0 I6 {
apache7 x' p T& X+ u6 ]( `/ d. I
LoadModule rewrite_module modules/mod_rewrite.so* n- z c( O6 L9 X0 ^, m& @( T
保存后重启服务:3 e: J$ R" }% f! T$ c1 o% I& U5 G
0 u' F2 K& S7 K; Q" P3 u3 Hbash: Q) R3 I3 u+ e, A b! b
sudo systemctl restart httpd
6 M& X3 U, Y8 M/ `2 T0 P验证是否生效: 运行 httpd -M | grep rewrite。6 B4 ^0 i$ N5 f9 ?, z# b& ]+ A
' |. L4 s# Z6 L2 A3 N3 CWindows (XAMPP/WAMP), O- |# v$ \) R( l e! J9 M) `
打开 Apache 安装目录下的 conf/httpd.conf文件,搜索 LoadModule rewrite_module,去掉行首的 #` 号,然后重启 Apache 服务。
) T% E! O3 V$ D+ i5 C1 a, Q8 M: \- n, O9 O7 R9 w) c
2. 配置目录权限 (AllowOverride)
$ [, N2 |$ d2 j- t7 i即使模块已启用,Apache 默认通常禁止通过 .htaccess 文件进行 URL 重写。你需要修改 Apache 配置文件,允许特定目录覆盖默认设置。
4 C, ~5 T% h) _8 c) J- k0 q# I% c# [/ P' B
查找配置文件
, n% x& D/ A; x6 C$ ?Debian/Ubuntu: 通常位于 /etc/apache2/apache2.conf 或 /etc/apache2/sites-available/000-default.conf。: r+ e) }8 U( Z4 D" ^) j
CentOS/RHEL: 通常位于 /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/ 下的虚拟主机配置文件。
! `: W$ P& c9 k7 l+ r" a0 Z" UWindows: 位于 httpd.conf 或 httpd-vhosts.conf。/ J+ R8 G7 F$ `0 M, ]+ g. J1 i
修改 Directory 指令
( h, P' B' V% p t/ s; n找到指向你 WordPress 根目录的 <Directory> 块,将 AllowOverride 的值从 None 改为 All。
% A( f! P9 a* s9 ]7 _
+ b8 N# g0 w, V- w# |+ q$ N示例配置:
3 Y& a" \) l i+ q0 C7 b! C4 u1 z, L* J5 H2 L8 J0 i1 @
apache
; B5 U1 G7 z* k1 k1 ?5 {<Directory /var/www/html>. Q9 l. {$ W$ K1 |% W/ ?
Options Indexes FollowSymLinks
9 ~. F( ?* j i: _9 Z. P! L, S0 | AllowOverride All8 T8 K* Y7 H6 l/ A* r
Require all granted; T* K7 Z, Y2 E+ Y+ G; J
</Directory>! V& c& K9 p! T8 x6 Z, H
注意:
4 s5 z# k( R. G; ]/ `; y& |- ]+ u
, R9 `4 v' p+ b8 ^. y+ t% w, U% K* \Options 中建议包含 FollowSymLinks,否则某些重写规则可能报错。
3 P& X& U8 u, _$ I修改完成后,必须重启 Apache 服务才能生效。
2 x n2 S4 v- A1 @: Z" d# ?0 u I3. 配置重写规则 (.htaccess)4 S* W' `( d. b
当服务器端配置完成后,WordPress 需要具体的重写规则来将“美观链接”映射到 index.php。, C- @* e3 H& B) z
2 z, C7 a2 x) v1 g
方法一:让 WordPress 自动生成(推荐)
- a+ T9 m! K6 A3 D) N9 {! k登录 WordPress 后台。: u$ m' H2 U9 w# s w
进入 设置 (Settings) > 固定链接 (Permalinks)。
. w: U; k, C/ _; S8 m: {& J9 o选择你想要的结构(如“文章名”),点击 保存更改。( r8 o, K& P, k/ C0 z) p7 {
WordPress 会尝试自动写入根目录下的 .htaccess 文件。如果提示成功,则配置完成。
4 s3 C( z3 p$ `- n1 t方法二:手动创建 .htaccess5 B/ m ^4 |* b9 H @8 k
如果 WordPress 提示无法写入文件(通常是因为权限问题),你需要手动创建或编辑网站根目录下的 .htaccess 文件,并填入以下标准 WordPress 重写规则:" n6 `/ ]( g. ?
|# ?1 r! }$ l0 u |apache2 M' j% s4 t* v4 L2 H4 H
# BEGIN WordPress) N9 s! p: ?) A7 \
<IfModule mod_rewrite.c>' m4 p2 O. S$ |1 P6 N" e4 ^
RewriteEngine On, {0 q+ f1 y; X$ H' `( q0 l
RewriteRule ^index\.php$ - [L]
8 T" W7 I) ]& }* ]) j" v% ZRewriteCond %{REQUEST_FILENAME} !-f: z7 V' G- U4 M7 J
RewriteCond %{REQUEST_FILENAME} !-d0 z- A* d+ q) L0 `5 S& ~2 C) `
RewriteRule . /index.php [L]
: V* ~; N) f" p' ?1 p# ^0 G! l. C</IfModule>; y% K" |: x' Z) b* _( j$ f
# END WordPress
! Y; I( R, y' n- p5 N" n关键说明:
$ G. b1 v4 f# q% R+ R s+ L0 g* V5 g
9 [& a- p& h7 g, ]RewriteEngine On: 开启重写引擎。
! ~: S" _( _0 W' k8 h0 C- }RewriteCond %{REQUEST_FILENAME} !-f: 如果请求的不是真实存在的文件。6 E8 Y7 R" V8 L% x/ L( G
RewriteCond %{REQUEST_FILENAME} !-d: 且请求的不是真实存在的目录。; i+ l9 L6 F& b% ?# U u) {7 p+ g
RewriteRule . /index.php [L]: 则将请求内部重定向到 index.php 处理。
) T6 g8 E2 V O' \8 G4. 常见问题排查; D! T( m5 q& O; f+ P
如果配置后仍然出现 404 错误,请检查以下几点:% d: X" C8 m+ H. J0 @: A/ s4 J
0 W! j5 S. Y: a$ f# K) e# n/ o
缓存问题:清除浏览器缓存、WordPress 插件缓存(如 WP Rocket, W3 Total Cache)以及 CDN(如 Cloudflare)缓存。# S" E l3 j/ V+ o6 Q8 U
文件权限:确保 .htaccess 文件对 Web 服务器用户(如 www-data 或 apache)可读。通常权限设置为 644 即可。
6 ^' k; R: m+ l配置层级冲突:如果你在虚拟主机配置 (VirtualHost) 中直接写了重写规则,请确保没有与 .htaccess 中的规则冲突。建议在虚拟主机中设置 AllowOverride None 并直接管理规则,或者保持 AllowOverride All 并使用 .htaccess。! _* ]$ Y! y* O7 R: ~/ @4 {2 c8 e
中文链接问题:如果文章标题包含中文,部分旧版服务器或配置可能导致解析错误。可以考虑使用插件将固定链接转换为拼音,或确保服务器字符集配置正确。* L' z- B) q5 U0 C0 ^/ ?$ s
完成以上步骤后,你的 WordPress 网站应该能够正常识别不带 /index.php 的美观固定链接了。
, ~+ O2 ]2 X+ T2 f1 E/ n/ S9 n' s% w* A: p3 A
: f9 @5 \4 g0 a2 W. e- t参考 |