Nginx:使用keep request head重写url

时间:2014-01-24 03:35:06

标签: apache .htaccess mod-rewrite nginx

我想做的是:

如果我请求的文件不在我的磁盘上,nginx将从真实服务器请求,这是我的.htaccess文件规则,我想将其转换为nginx规则,结果是:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://xxx.xxx.xxx.xxx/js/$0 [P]
    location /js/ {
        root   E://Work/master;

        if (!-e $request_filename){
            rewrite ^(.*)$ http://xxx.xxx.xxx.xxx/$1 redirect;
       }            
    }

但这会导致两个问题:

  1. 如果我请求test.com/js/test.js,它会重定向到我浏览器中的http://xxx.xxx.xxx.xxx//js/sea1.2.js !但真正的服务器可以拒绝请求,因为我没有使用test.com域,并返回404。那么我怎样才能让后台真实服务器的nginx请求保持原始请求标题信息至少保留域名。就像Apache那样。

  2. 如上所述,重定向结果为http://xxx.xxx.xxx.xxx//js/sea1.2.js,在js之前有双斜杠。我该如何解决?

2 个答案:

答案 0 :(得分:0)

404表示找不到,请更改您的配置:

location /js/ {
    root   E://Work/master;

    if (!-e $request_filename){
        rewrite ^(.*)$ http://xxx.xxx.xxx.xxx$1 redirect;
   }            
}

重定向结果为http://xxx.xxx.xxx.xxx/js/sea1.2.js,这会使其显示为Apache

答案 1 :(得分:0)

我认为[P]标志代表代理,avoiding nginx's if,这是我的答案

location / {
    try_files $uri @proxy;
}
location @proxy {
    proxy_pass http://xxx.xxx.xxx.xxx/$request_uri;
}