使用.htaccess我希望將%{PATH_INFO}轉換爲用於引導的查詢字符串參數。但我想阻止訪問者手動輸入引導參數。刪除某些查詢字符串參數,除非通過重寫添加
所以這個輸入的URL: www.example.com/user/pictures?id=65
實際上顯示: www.example.com?bootstrap=/user/pictures & ID = 65
但如果手動輸入
此輸入的URL: www.example.com?bootstrap=/user/pictures &我d = 65
刪除它: www.example.com?id=65
或顯示錯誤: 404:未找到
最好的情況下
手動輸入的引導被忽略,並且%{PATH_INFO}成爲一個新的參數。
所以這個: www.example.com/user/pictures?id=65 &引導= somecrap
顯示: www.example.com?id=65 &引導= /用戶/圖片
阻止手動輸入的引導程序參數有兩個原因。 1)安全。我們不希望用戶狩獵和啄食不打算顯示的文件。 2)衝突。我們不想在手動輸入的引導程序和正確的%{PATH_INFO}之間進行選擇。
刪除引導參數很容易。像...
RewriteCond %{QUERY_STRING} ^(.*&)?bootstrap=[^&]*(?:&(.*))?$ [NC]
RewriteRule^%{REQUEST_URI}?%1%2 [L,NE]
添加參數很容易。 (我的是更復雜,但這給出了這個概念。)
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI}%{PATH_INFO} (.*?)(/.+)\2$
RewriteRule ^(.*)$ /%1?bootstrap=%2 [QSA,L]
如果htaccess的剛跑一次通過,這兩個片段會做的伎倆。但是,相反,每次重寫後,htaccess都會重新啓動,並且我添加的引導參數會再次被刪除。
我知道quick-n-dirty的修復方法是將[END]添加到第二條規則,但是這不會在這裏工作。
我需要的是一種從原始請求中刪除?「bootstrap = xxx」的方法,而不是從重寫的請求中刪除。
感謝
非常好的使用'REDIRECT_QUERY_STRING' ++ – anubhava