apache2.4.7 .htaccess重寫url的一些細節

今晚玩了下apache的重寫規則,發現一些被容易忽略的細節,分享一下。html

首先,說明一下實例環境的其餘相關配置:apache

documentRoot  /var/www/html瀏覽器

.htaccess的放置路徑  /var/www/html/L-Production/public測試

 

一、替換規則的「絕對」和「相對」,例如:url

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。spa

 

二、模式匹配的對象與RewriteBase無關,只與.htaccess的所在目錄有關,例如:code

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。htm

這說明了 ^(.*)/$ 匹配的字符串是js/,而不是url中除去了/L-Production的public/js,RewriteBase隻影響替換規則。對象

另,我在最後的測試中還發現,當這裏的$1加上斜槓後,重定向結果仍然是http://127.0.0.1/L-Production/js,這說明在設置了RewriteBase後,全部的替換規則都變成了"絕對"的。blog

相關文章
相關標籤/搜索