使用.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