现在,我正在使用以下Nginxconfiguration将app的域名从app.example.com到app.newexample.com :
server { server_name app.example.com; location /app/ { rewrite ^/app/(.*)$ http://app.newexample.com/$1; } }
我需要显示一个popup式标语来通知用户域名迁移。 而且我想根据referrer或app.newexample.com的某种其他头app.newexample.com
但是,如何在上面的rewrite附加一个额外的头文件,以便JavaScript能够检测到这个头文件,并且只有当这个头文件存在的时候才显示这个横幅文件呢?直接在app.newexample.com的用户不应该看到这个popup横幅文件?
从zip压缩解压缩图像
用Nginx和meteor分开服务静态资产和媒体?
如何设置橡胶+ resque_web + Nginx
上游超时错误在Nginx + socket.io +代理+ ssl
反向代理http / 2从h2到h2c
无法访问本地windows机器上的Nginx容器
Nginx的代理传递configurationdocker
运行Nginx加jar的Docker
我可以用独angular兽SPDY吗?
如何使用位置正则Expression式通过Nginxredirect/处理来自search引擎的请求
问题是,当你“重写”到具有协议和主机名的URI(在你的情况下是http://app.newexample.com/ )时,Nginx发布了公平的http重定向(我猜这个代码将会是301重定向“)。 这使您只有两种机制将任何信息传输到新URL的处理程序:
曲奇饼
网址本身
由于您正在将用户重定向到新域,因此cookie是不可行的。 但即使在一个普通的域名的情况下,我会选择URL来传输这种信息,如
server_name app.example.com; location /app/ { rewrite ^/app/(.*)$ http://app.newexample.com/$1?from_old=yes; }
这使您可以自由地在Nginx或浏览器中进行处理(使用JavaScript)。 你甚至可以做你想要的内容,在新的应用服务器Nginx配置中为JavaScript发出一个特殊的http头:
server_name app.newexample.com; location /app { if ($arg_from_old) { add_header X-From-old-Site yes; } }
这里讨论了类似的问题。 你可以尝试使用第三方模块httpheadersMore (我自己没有尝试过)。 但是,即使这个模块不起作用,在这个模块的帮助下,你完全可以做到。 例子就在这里 。
你的重定向缺少一件事,重定向类型/代码,你应该在你的重写行结尾添加permanent ,我不知道什么是默认的重定向代码,如果没有明确提到。
rewrite ^/app/(.*)$ http://app.newexample.com/$1 permanent;
更好的方法是使用回报
location /app { return 301 $scheme://app.newexample.com$request_uri; }
如上所述添加一个get参数也是一个可靠的方法来做到这一点,你可以轻松地设置一个会话(flash)并重新定向到它自己的页面,但删除附加的get参数后。
编辑:重定向不发送引用标头,如果旧域仍在工作,你可以把一个简单的PHP文件,重定向与标题调用。
header("Location: http://app.newexample.com")
没有任何头文件的一个可能的解决方案是检查document.referrer属性:
if (document.referrer.indexOf("http://app.example.com") === 0) { alert("We moved!"); }
使用301会将引用者设置为旧页面。 如果引荐来源不以旧网页网址开头,则不是由该网页引导的。 也许有点快肮脏,但应该工作。
总结以上是内存溢出为你收集整理的在nginx重写中发送额外的头文件全部内容,希望文章能够帮你解决在nginx重写中发送额外的头文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)