WordPress下.htaccess RewriteRule规则失效,请求协助排查
问题排查与修复方案
以下是导致你的RewriteRule不生效的关键问题及修复步骤:
1. 正则匹配模式错误
在.htaccess中,RewriteRule匹配的URI不包含开头的斜杠,你原规则中的^\/programme$永远无法匹配/programme请求。需修正为同时匹配有无末尾斜杠的模式:
RewriteRule ^programme/?$ /wordpress/programme/ [L]
^programme/?$:兼容/programme和/programme/两种访问路径[L]标记:执行完该规则后停止后续规则处理,避免被WordPress的默认规则覆盖
2. 规则顺序错误
你的HTTP转HTTPS规则带有[L]标记,会终止后续规则执行。原顺序会导致HTTP访问/programme时,先触发内部重写再跳转到HTTPS,最终URL暴露真实路径/wordpress/programme/。正确顺序应为先执行HTTPS重定向,再执行内部重写,确保用户地址栏始终显示/programme。
修正后的完整.htaccess配置
RewriteEngine On ## http -> https 重定向(放在最前面) RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE,QSA] # 内部重写:访问/programme时加载/wordpress/programme/内容 RewriteRule ^programme/?$ /wordpress/programme/ [L] # BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "END WordPress" are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L] </IfModule> # END WordPress
额外注意事项
- 测试时请清除浏览器缓存或继续使用隐私浏览模式
- 若
/wordpress/programme/是WordPress虚拟页面而非物理目录,上述规则依然有效,WordPress默认规则会接管后续请求处理
内容的提问来源于stack exchange,提问作者dom mazette
相关产品推荐
相关产品推荐

