WordPress(OpenLiteSpeed) URL重写求助:美化下载页参数链接
WordPress + OpenLiteSpeed 伪静态URL重写修复方案
问题分析
你尝试的generate_rewrite_rules方法无效,核心原因有两点:
- 未注册自定义查询变量
key,WordPress会自动忽略未注册的URL参数 - 未触发重写规则刷新,或OpenLiteSpeed缓存了旧规则导致新规则未生效
修复后的完整代码
// 注册自定义查询变量,让WordPress识别key参数 add_filter('query_vars', function($vars) { $vars[] = 'key'; return $vars; }); // 添加重写规则,匹配数字格式的key值 add_filter('generate_rewrite_rules', function($wp_rewrite) { $new_rule = [ 'preview-and-download/(\d+)/?$' => $wp_rewrite->index . '?key=$matches[1]' ]; $wp_rewrite->rules = array_merge($new_rule, $wp_rewrite->rules); });
必做生效操作
- 刷新重写规则:登录WordPress后台,进入「设置」→「固定链接」,无需修改任何设置,直接点击「保存更改」,触发WordPress生成新的重写规则。
- 清理OpenLiteSpeed缓存:如果服务器开启了缓存,进入主机面板或OpenLiteSpeed控制台,清理站点缓存与服务器缓存,确保新规则被加载。
- 验证参数传递:在你的下载页面模板中,使用
get_query_var('key')获取参数值,确认参数能正常传递到页面逻辑中。
更稳定的替代方法:使用官方add_rewrite_rule函数
WordPress官方推荐用add_rewrite_rule添加规则,比直接修改$wp_rewrite->rules更规范且不易冲突:
// 注册查询变量 add_filter('query_vars', function($vars) { $vars[] = 'key'; return $vars; }); // 初始化时添加重写规则,设置最高优先级 add_action('init', function() { add_rewrite_rule( '^preview-and-download/(\d+)/?$', 'index.php?key=$matches[1]', 'top' ); });
额外优化:旧URL301跳转(可选)
为避免重复内容,可添加规则将旧的带参数URL重定向到新的伪静态URL:
add_action('template_redirect', function() { if (isset($_GET['key']) && is_page('preview-and-download')) { $key = sanitize_text_field($_GET['key']); if (preg_match('/^\d+$/', $key)) { $new_url = home_url("/preview-and-download/{$key}/"); wp_redirect($new_url, 301); exit; } } });
内容的提问来源于stack exchange,提问作者Thanh Trần
相关产品推荐
相关产品推荐

