如何使用add_rewrite_rule传递变量并实现特定URL重定向
URL重定向实现方案
以下针对两种常见服务器环境给出配置方案,规则顺序很重要,需将更具体的规则放在前面:
Apache(.htaccess 配置)
在网站根目录的.htaccess文件中添加以下规则(确保服务器已启用mod_rewrite模块):
RewriteEngine On # 处理 /foo/entries/doedit?id=xxx 的重定向 RewriteRule ^foo/([^/]+)/([^/]+)$ /foo?section=$1&action=$2&%{QUERY_STRING} [L,R=301] # 处理 /foo/doedit?id=xxx 的重定向 RewriteRule ^foo/([^/]+)$ /foo?action=$1&%{QUERY_STRING} [L,R=301]
[L]表示匹配后停止后续规则处理;[R=301]为永久重定向,若需临时重定向可改为R=302。- 正则
^foo/([^/]+)/([^/]+)$会捕获entries和doedit,分别对应变量$1和$2;%{QUERY_STRING}会自动保留原URL的id参数。
Nginx(站点配置文件)
在对应站点的server块中添加以下rewrite规则:
# 处理 /foo/entries/doedit?id=xxx 的重定向 rewrite ^/foo/([^/]+)/([^/]+)$ /foo?section=$1&action=$2$is_args$args permanent; # 处理 /foo/doedit?id=xxx 的重定向 rewrite ^/foo/([^/]+)$ /foo?action=$1$is_args$args permanent;
permanent对应301永久重定向,临时重定向替换为redirect。$is_args会根据原URL是否带参数自动添加?或空字符串,$args保留原参数(如id=17)。
内容的提问来源于stack exchange,提问作者Trinity
相关产品推荐
相关产品推荐

