2017-06-04 84 views
0

我試圖匹配用戶可以輸入的任何內容,但只包含一個單詞。這將匹配除字外的任何內容,但變量$ 1是空的。在NGINX中排除使用正則表達式重定向的詞

rewrite ^/folder/((?:(?!word).)*)/$ /folder/$1/; 
rewrite ^/folder/((?:(?!word).)*)/$ /folder/index.php?i=$1; 

例子:

www.example.com/folder/a只會改寫爲www.example.com/folder/a// 並且還重定向到// www.example.com /文件夾/一/將只是重寫到www.example.com/folder/a//

我覺得我非常接近解決方案,我錯過了什麼?

回答

0

這是因爲第一個捕獲組進行量化,並且.重新捕獲0次或更多次,並在最後與組1 .$1)捕獲的最後一個字符。

你需要重新寫的磨礪貪婪令牌與非捕獲組和一個捕捉一個包裝它:

rewrite ^/folder/((?:(?!word).)*)/$ /folder/$1/; 
       ^^^^   ^

現在,(?:(?!word).)*結構使用非捕獲組(沒有多餘的組涉及重新分配)和外部(...)形成一個ID爲1的捕獲組。

+0

我添加了第二組括號,我沒有那些之前,它似乎現在工作,但它的後面加了一個斜槓。我以前從來沒有這樣做過。 – Iscariot

+0

然後刪除替換中的最後一個斜槓 - '/ folder/$ 1;' –

+0

rewrite ^/folder /((?:(?!word)。)*)/ $ /folder/index.php?i=$1; – Iscariot