Nginx 使用不带 if 的查询字符串进行重写

Nginx 使用不带 if 的查询字符串进行重写

我有多个使用不同 Query_String 的 apache 重写来转换为 nginx:

 ServerName oldsite.com 
 RewriteCond %{QUERY_STRING} ^ubb=showflat&Number=662213$ 
 RewriteRule ^/ubbthreads/ubbthreads.php$ http://newsite.com/1/? [R=301,NC,L]
 RewriteCond %{QUERY_STRING} ^ubb=showflat&Number=662214$ 
 RewriteRule ^/ubbthreads/ubbthreads.php$ http://newsite.com/2/? [R=301,NC,L]

-->

server {
    listen       80;
    server_name  oldsite.com;
    location ~ /ubbthreads/{
        if ($arg = "ubb=showflat&Number=662213"{
        rewrite ^ubbthreads/ubbthreads.php http://newsite.com/1/? permanent;
        }
        if ($arg = "ubb=showflat&Number=662214"{
        rewrite ^ubbthreads/ubbthreads.php http://newsite.com/2/? permanent;
        }
    }

这是正确的方法吗?有没有其他不使用 if 的方法?

答案1

您也许可以使用地图。

map $arg_Number $new {
    662213 http://newsite.com/1/?
    662214 http://newsite.com/2/?
}

然后在你的位置

rewrite ^ $new permanent;

请注意,只有将每个请求都重定向到该位置时,才能避免 if。如果您只需要在 Number 是特定内容或已设置时重定向,那么您无法避免 if,在更坏的情况下(仅当有特定内容时),您根本无法使用地图。

相关内容