iT邦幫忙

0

Nginx rewrite 設定問題

各位大大好,小妹是Nginx新手~

先前公司一直採用的是Apache,近期在考慮要移植成Nginx,但在rewrite上遇到一點問題

我們有將js用combine的方式處理,
所以以前舊版apache有類似以下設定:

<Directory "apache/htdocs/web">
            AllowOverride All
            RewriteEngine On
            RewriteRule (.*\.js) combine.php?type=javascript&files=$1
        </Directory>

如此設定的時候,當網址有呼叫到js結尾的部分就會幫我們丟去combine.php處理,網址就會轉成這樣:


http://www.abc.com/web/combine.php?type=javascript&files=js/aaa.js,js/bbb.js,js/ccc.js

最近轉成Nginx我就改寫成以下

location /web {
        rewrite (.*\.js) /web/combine.php?type=javascript&files=$1;
}

但是轉址時卻會變成:


http://www.abc.com/web/combine.php?type=javascript&files=/web/js/aaa.js,js/bbb.js,js/ccc.js

去程式抓,會發現在Nginx底下跑,的確會有第一個的路徑多了web/這一段。
感覺上是Nginx抓相對路徑跟Apache好像不一樣?
請問要怎麼設定才能跟Apache產生一樣的效果?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
hsiang11
iT邦好手 1 級 ‧ 2018-05-31 17:15:30

你在location時就已經指定/web了
下面rewrite 又再一次/web
最後會多出/web應該不奇怪吧

看更多先前的回應...收起先前的回應...
yui81424 iT邦新手 5 級 ‧ 2018-05-31 17:31:45 檢舉

我一直以為location指的是,從網址之後的路徑。
因為我不希望根底下的也去找,所以用location去鎖他,讓只有/web/底下的檔案會去做rewrite。
後面rewrite會再出現一次是因為那個php的路徑就是在web底下,不寫的話怕找不到。

hsiang11 iT邦好手 1 級 ‧ 2018-05-31 17:50:16 檢舉

http://seanlook.com/2015/05/17/nginx-location-rewrite/
這篇可以看看
實際上nginx設定的複雜 我也搞不懂
我是看到程式端可能會寫/xxx 或是@xxx的開頭
才設定location /xxx {
alias /var/www/html/web/;
這種方式讓有這類的開頭,回頭去找網站所在位置

yui81424 iT邦新手 5 級 ‧ 2018-05-31 18:21:23 檢舉

謝謝您,我這篇其實看過了…
但問題還是無法解決所以才上來發問

補充一下
我自己認為這一行應該沒寫錯

rewrite (.*\.js) /web/combine.php?type=javascript&files=$1;

因為我一改我的js就直接死給我看...
查log就發現沒進combine.php當然死給我看...

所以問題可能還是出在location嗎...

rewrite (.*.js) /web/combine.php?type=javascript&files=../$1;

這樣暫時解決了吧.....

yui81424 iT邦新手 5 級 ‧ 2018-06-05 09:21:04 檢舉

好粗暴的作法/images/emoticon/emoticon16.gif
Nginx的location是不是跟Apache的Directory 不一樣呀...

我要發表回答

立即登入回答