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-Production
2 
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后,所有的替换规则都变成了"绝对"的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。