如何理解RewriteRule?

时间:2014-03-14 08:51:23

标签: php .htaccess

这是我得到的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 个答案:

答案 0 :(得分:4)

([^/]+)(/.*.(js|css))

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

基本上,有3个捕获组。第三组将被此规则忽略,这意味着,最后的.js将被切断'关闭。但是,如果你匹配该URL,它会给你:

1. `http:`

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

3. `js`

我猜这不是你想要的。你可以在这里测试http://regex101.com/#python

即使你从第一个开始,非 - /'规则是关于,你会"想念"请求的/skin部分

我给你一个你想要路径的镜头,所以规则是:

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

会匹配:

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

以及类似http://something.com/skin/m/1393854026/css/prototype/prototype.css,/css/prototype/window.css,/css/scriptaculous/builder.css

的CSS网址
 1. [39-42] `css`
 2. [38-123] `/css/prototype/prototype.css,/css/prototype/window.css,/css/scriptaculous/builder.css`