各位大大好,小妹是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產生一樣的效果?
你在location時就已經指定/web了
下面rewrite 又再一次/web
最後會多出/web應該不奇怪吧
我一直以為location指的是,從網址之後的路徑。
因為我不希望根底下的也去找,所以用location去鎖他,讓只有/web/底下的檔案會去做rewrite。
後面rewrite會再出現一次是因為那個php的路徑就是在web底下,不寫的話怕找不到。
http://seanlook.com/2015/05/17/nginx-location-rewrite/
這篇可以看看
實際上nginx設定的複雜 我也搞不懂
我是看到程式端可能會寫/xxx 或是@xxx的開頭
才設定location /xxx {
alias /var/www/html/web/;
這種方式讓有這類的開頭,回頭去找網站所在位置
謝謝您,我這篇其實看過了…
但問題還是無法解決所以才上來發問
補充一下
我自己認為這一行應該沒寫錯
rewrite (.*\.js) /web/combine.php?type=javascript&files=$1;
因為我一改我的js就直接死給我看...
查log就發現沒進combine.php當然死給我看...
所以問題可能還是出在location嗎...
rewrite (.*.js) /web/combine.php?type=javascript&files=../$1;
這樣暫時解決了吧.....
好粗暴的作法
Nginx的location是不是跟Apache的Directory 不一樣呀...