我想做的是:
如果我请求的文件不在我的磁盘上,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;
}
}
但这会导致两个问题:
如果我请求test.com/js/test.js
,它会重定向到我浏览器中的http://xxx.xxx.xxx.xxx//js/sea1.2.js
!但真正的服务器可以拒绝请求,因为我没有使用test.com
域,并返回404
。那么我怎样才能让后台真实服务器的nginx请求保持原始请求标题信息至少保留域名。就像Apache
那样。
如上所述,重定向结果为http://xxx.xxx.xxx.xxx//js/sea1.2.js
,在js
之前有双斜杠。我该如何解决?
答案 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;
}