2014-01-24 48 views
0

我想要做的是:Nginx的:重寫URL以保持請求頭

如果我要求的文件是不是我的硬盤上,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之前有雙斜線。我該如何解決它?

回答

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

0

我承擔[P]標誌意味着代理,也avoiding nginx's if,這是我的回答

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