2014-03-14 57 views
0

這是一個重寫規則我:如何理解RewriteRule?

RewriteRule ^([^/]+)(/.*.(js|css))$ ../../lib/minify/m.php?f=$2&d=$1 

據我所知,$ 2和$ 1個參考括號內的表達式。有人可以解釋一下$ 2和$ 1是什麼,請看這個URL嗎?

http://something.com/skin/m/1393854026/js/prototype/prototype.js,/js/prototype/window.js,/js/scriptaculous/builder.js 

以某種方式在我的本地機器上填充$ _GET ['f']。但它不在我的服務器上工作。

我可以知道如何使它成爲可能嗎?

回答

2

基本上,有3個捕獲組。第三組將被這條規則忽略,這意味着,最後的.js將被「砍掉」。但是,如果你是匹配的網址,它會給你:

1. `http:` 

2. `//something.com/skin/m/1393854026/js/prototype/prototype.js,/js/prototype/window.js,/js/scriptaculous/builder.js` 

3. `js` 

我想這不是你想要的。即使你會在第一個「非/」的規則是什麼,你都會「小姐」的請求的/skin部分

我給一個鏡頭,你可以在這裏進行測試http://regex101.com/#python

那你只是想的路徑,所以規則是:

(?=/(js|css))(.+\1) 

將匹配:

1. [39-41] `js` 
2. [38-117] `/js/prototype/prototype.js,/js/prototype/window.js,/js/scriptaculous/builder.js` 

和一個CSS URL像http://something.com/skin/m/1393854026/css/prototype/prototype.css,/css/prototype/window.css,/css/scriptaculous/builder.css

1. [39-42] `css` 
2. [38-123] `/css/prototype/prototype.css,/css/prototype/window.css,/css/scriptaculous/builder.css` 
4
([^/]+)(/.*.(js|css)) 

Regular expression visualization

Debuggex Demo

+0

很酷的工具! :)以前從未見過:) –

+0

是的,漂亮的工具! – user1856596