基于单词取反的.htaccess URL重写规则问题求助
解决WordPress路径重定向:禁用/wp-blog访问并保留/wp-admin权限
我来帮你搞定这个.htaccess重定向的问题!你的需求很清晰:把访问/wp-blog下除了wp-admin后台的所有请求,都永久重定向到前端展示的/blog路径,同时确保后台能正常访问。
你原来规则的问题
你之前写的规则有两个关键问题:
RewriteCond的写法不正确——它默认需要匹配RewriteRule的测试字符串,或者明确指定要匹配的服务器变量(比如%{REQUEST_URI}),直接写^wp-blog/((?!wp-admin).)*$无法正确捕获请求路径。- 规则的匹配范围和捕获逻辑没有对齐,导致重定向的目标路径可能出现错误。
正确的.htaccess规则
把下面的规则添加到你的.htaccess文件最顶部(一定要放在WordPress自动生成的# BEGIN WordPress注释块之前,避免被WordPress的内部路由规则覆盖):
# 开启重写引擎(如果文件里已经有这行可以省略) RewriteEngine On # 匹配/wp-blog下非wp-admin的所有请求 RewriteCond %{REQUEST_URI} ^/wp-blog/(?!wp-admin)(.*)$ [NC] # 重定向到/blog对应的路径 RewriteRule ^wp-blog/(.*)$ /blog/$1 [R=301,L]
规则详解
RewriteCond %{REQUEST_URI} ^/wp-blog/(?!wp-admin)(.*)$ [NC]:%{REQUEST_URI}是Apache的服务器变量,代表当前请求的完整路径(比如/wp-blog/post-1)。(?!wp-admin)是负向前瞻断言,确保/wp-blog/后面紧跟的不是wp-admin,完美排除后台路径。[NC]表示不区分大小写,兼容不同大小写的请求(比如/WP-BLOG/Post-1)。
RewriteRule ^wp-blog/(.*)$ /blog/$1 [R=301,L]:^wp-blog/(.*)$捕获/wp-blog/后面的所有内容(比如post-1)到$1变量。/blog/$1把捕获的内容拼接到/blog/后面,生成正确的前端路径。R=301表示永久重定向(适合生产环境),测试阶段可以先用R=302临时重定向,避免浏览器缓存错误规则。L表示这是最后一条规则,匹配成功后停止后续规则的处理。
注意事项
- 测试后台访问:访问
example.com/wp-blog/wp-admin应该不会被重定向,能正常进入WordPress后台。 - 清除浏览器缓存:如果之前测试过错误的重定向,记得清除浏览器缓存再测试新规则。
- 规则位置:一定要放在WordPress自带规则的前面,否则WordPress的内部重写会优先处理,导致重定向不生效。
内容的提问来源于stack exchange,提问作者Marcos Pérez Gude
相关产品推荐
相关产品推荐

