首页 > 代码库 > 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的一些细节