iT邦幫忙

0

請教 nginx 的正規表示式內要如何使用變數呢@@?

TB 2017-03-15 13:53:016000 瀏覽

大家好
小的有一個 nginx 設定檔的問題~
比如下方的 rewrite

把 myBlog1 的網指導引到 myBlog2~
rewrite ^(?i)/myBlog1/(.*)$ "/myBlog2/$1" redirect;

是這樣的~類似的設定會重覆很多
我嘗試使用變數做設定

set $url "myBlog1";
set $to "myBlog2";
rewrite ^(?i)/$url/(.*)$ "/$to/$1" redirect;

在後面使用 $to 是可以順利運作的
可是前面改為 $url 後是失敗的

請問如果要在正規表示式內使用變數的話,
要怎樣寫呢 @@?

以下情況也會用到,
想把 myBlog 替換成變數也是失敗的
location ^~ /myBlog1 {

}

/images/emoticon/emoticon06.gif

fillano iT邦超人 1 級 ‧ 2017-03-15 14:04:41 檢舉
應該不行吧...

2 個回答

WilliamHuang
iT邦研究生 1 級 ‧ 2017-03-15 14:19:26
【**此則訊息已被站方移除**】
1
bizpro
iT邦大師 1 級 ‧ 2017-03-15 14:29:11
Syntax: 	rewrite regex replacement [flag];
Default: 	—
Context: 	server, location, if

rewrite的第一個參數是regex, regular expression, 正則表示式, 在其中放置變數是錯誤的做法.

Syntax: 	location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: 	—
Context: 	server, location

location 中的uri是常數. 非變數. 而且Nginx的自定義變數是不能繼承的, 如下:

Syntax: 	set $variable value;
Default: 	—
Context: 	server, location, if

set只獨自在server, location, 和if的區塊中, 不能繼承. 所以在server區塊中定義的變數不能用在location中.

如果要自由使用變數, 唯一的方法是使用lua, 這需要openresty, 或拿openresty的元件來自己編譯.

TB iT邦新手 3 級 ‧ 2017-03-16 12:08:35 檢舉

/images/emoticon/emoticon41.gif
後來,寫了個小工具去產生設定檔,暫時解決問題了,感謝~

bizpro iT邦大師 1 級 ‧ 2017-03-16 14:02:11 檢舉

我用bash和dialog寫一個互動的設定檔產生器.

我要發表回答

立即登入回答