我正在尝试重定向一个完整的 URL,包括 URL 上的每个字符串。
我希望它
http://www.SITE-A.com/everything?complete=url&fully=redirected
重定向到
http://www.SITE-B.com/everything?complete=url&fully=redirected
这对于 Apache 来说是可行的
RewriteRule ^/?$ "http\:\/\/www\.site-b\.com\/" [R=301,L]
我尝试了 serverfault 上找到的所有方法,但还是没成功。
我得到的总是这个重定向
http://www.SITE-A.com/everything?complete=url&fully=redirected
重定向到
http://www.SITE-B.com/?complete=url&fully=redirected
‘一切' 在重定向后消失
我试过这些
location /quick-search { try_files $uri http://www.site-b.com/quick-search.php?$arg_q; }
和
location / { rewrite ^/(.*) http://www.site-b.com/$1 permanent; }
答案1
根据您的 Apache 重写规则,您正在尝试重写任何请求的主机部分。
使用 NGINX 实现此目的的常见方法是使用server
块和return
。
server {
listen 80;
server_name www.site-a.com;
return 301 http://www.site-b.com$request_uri;
}
server {
listen 80;
server_name www.site-b.com;
[...your config...]
}
这是最快的方法,如下所示:https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
答案2
位置指令不考虑查询字符串(? 之后的所有内容)。因此,您需要在位置块内单独检查这一点,可能使用 if 和 $args。