当文件作为参数传递时,htaccess url重写规则失败

时间:2012-11-09 16:42:04

标签: .htaccess url-rewriting

我有这个网址重写规则

RewriteRule ^(send-your-request.*)$ / [NC,L,QSA,R=301]

它应该基本上只是从URL中删除“/ send-your-request”(即用域中的查询字符串参数重写它,即

http://example.com/send-your-request/?a_aid=rocketnews24&pname=just%20a%20test

被重写为:

http://example.com/?a_aid=rocketnews24&pname=just%20a%20test

在这种情况下它可以工作,但是如果我添加最后一个参数,它就会停止工作

http://example.com/send-your-request/?a_aid=rocketnews24&pname=just%20a%20test&plink=http%3A%2F%2Fradio-eva.jp%2Fshop%2Fproducts%2Fdetail.php%3Fproduct_id%3D82

有人能告诉我一个更好的重写规则,可以处理所有的查询字符串参数吗?

修改 这是我的其他规则,但我在第一个规则上有“L”,所以应该停止处理吗?

RewriteRule ^(send-your-request.*)$ / [NC,QSA,R=301,L]
Redirect 301 /products http://whiterabbitexpress.com/
RewriteRule ^index\.php$ - [L]
RewriteCond %{QUERY_STRING} ^(.*)q=(.*)$
RewriteRule ^(.*)$ $1?%1s=%2 [L,R=301] 
RewriteRule ^catalogsearch/result/?$ / [NC,QSA,L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

2 个答案:

答案 0 :(得分:1)

解决:这是一个旨在防止注射的Mod_security规则。

SecRule REQUEST_URI“=(?:ogg | gopher | data | php | zlib |(?:ht | f)tps?)://”\           “capture,id:340165,t:none,t:urlDecodeUni,t:replaceNulls,t:compressWhiteSpace,t:lowercase,rev:275,severity:2,msg:'Atomicorp.com UNSUPPORTED DELAYED规则:Uniencoded可能的远程文件注入尝试URI(AE)',logdata:'%{MATCHED_VAR}'“

能够通过ConfigServer ModSecurity Control修改规则。

答案 1 :(得分:0)

没有承诺,但这是一个应该做同样事情的替代方案,但值得一试。重写中的?将剥离QueryString,然后%1后引用将重新附加它。

RewriteBase /
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^send-your-request/?$ /?%1 [NC,R=301,L]

值得注意的是,QueryString会自动传递重写,而QSA修饰符只会在您的重写中出现?时附加其他参数 - 如果省略QSA并且在重写中包含?,它将剥离现有的QueryString。您也可以尝试不使用QSA

RewriteBase /
RewriteRule ^send-your-request/?$ / [NC,R=301,L]