首页 > 代码库 > apache2.4.7 .htaccess重写url的一些细节

apache2.4.7 .htaccess重写url的一些细节

今晚玩了下apache的重写规则,发现一些被容易忽略的细节,分享一下。

首先,说明一下实例环境的其他相关配置:

documentRoot  /var/www/html

.htaccess的放置路径  /var/www/html/L-Production/public

 

1、替换规则的“绝对”和“相对”,例如:

1 # Redirect Trailing Slashes...2 RewriteRule ^(.*)/$ /$1 [L,R=301]

这是一个用重定向消除url最后斜杠的实现,这里需要注意 /$1 的斜杠,它是一个“绝对”的写法,当我在浏览器输入http://127.0.0.1/L-Production/public/js/,意外发现url被重定向成http://127.0.0.1/js,而当我把 /$1 的斜杠去掉后,url才被重定向为预期的http://127.0.0.1/L-Production/public/js。

 

2、模式匹配的对象与RewriteBase无关,只与.htaccess的所在目录有关,例如:

1 RewriteBase /L-Production2 3 # Redirect Trailing Slashes...4 RewriteRule ^(.*)/$ $1 [L,R=301]

在浏览器输入http://127.0.0.1/L-Production/public/js/,url会被重定向成http://127.0.0.1/L-Production/js,而非http://127.0.0.1/L-Production/public/js。

这说明了 ^(.*)/$ 匹配的字符串是js/,而不是url中除去了/L-Production的public/js,RewriteBase只影响替换规则。

另,我在最后的测试中还发现,当这里的$1加上斜杠后,重定向结果仍然是http://127.0.0.1/L-Production/js,这说明在设置了RewriteBase后,所有的替换规则都变成了"绝对"的。

apache2.4.7 .htaccess重写url的一些细节