如何配置Nginx动态URL rewrite规则实现Entry ID参数提取跳转
Nginx动态Entry ID重写规则配置方案
Nginx的
rewrite指令默认仅匹配URL的路径部分(不包含?之后的查询参数),如果需要限制查询参数,需要额外结合$query_string变量判断。
场景1:不限制查询参数,只要路径符合规则就跳转
只要URL路径格式为/{Entry ID}/index.php就触发跳转,不校验后面的查询参数,规则如下:
# 301永久跳转,若需要临时跳转把permanent改成redirect rewrite ^/([0-9a-zA-Z_]+)/index.php$ https://example.com/index.php?entryId=$1 permanent;
规则说明:
- 正则中的
([0-9a-zA-Z_]+)用来捕获路径第一段的Entry ID,匹配数字、大小写字母、下划线,和示例的Entry ID格式匹配,如果你Entry ID支持其他字符,可以调整正则范围 $1就是正则捕获到的动态Entry ID值- 跳转默认会自动携带原URL的所有查询参数,如果你不需要保留原查询参数,可以在$1后面加
?,即写成index.php?entryId=$1?
场景2:严格匹配示例中的查询参数
要求原URL必须携带&autoplay=false&automute=true查询参数才触发跳转,规则如下:
if ($query_string = "&autoplay=false&automute=true") { rewrite ^/([0-9a-zA-Z_]+)/index.php$ https://example.com/index.php?entryId=$1? permanent; }
规则说明:
- 这里的
$query_string变量对应原URL?之后的全部内容,完全匹配才会进入重写逻辑 - 末尾加
?是为了清除原查询参数,避免跳转后URL同时携带entryId和原查询参数,需要保留的话可以去掉这个?
内容的提问来源于stack exchange,提问作者Anatoly Rapoport
相关产品推荐
相关产品推荐

