我有多个使用不同 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,在更坏的情况下(仅当有特定内容时),您根本无法使用地图。