htaccess regexp匹配除字符串或扩展名以外的所有内容

时间:2017-05-09 21:13:56

标签: regex .htaccess

在我的.htaccess文件中,我有以下一行阻止文件注入:

RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]

我想添加一个例外来接受以image=开头并以.jpg.png结尾的请求。

我想过这样做:

RewriteCond %{QUERY_STRING} ^(?!(image)$)=http:// [OR]

它不起作用

我也尝试过:

RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http://[^.jpg|.png]

没有工作

我想要实现的是阻止查询字符串及其值除image=http://some_url.jpg(or .png)之外的任何内容

我是否知道如何在不承担额外风险的情况下实现这一目标?

1 个答案:

答案 0 :(得分:2)

  

我想要实现的是阻止查询字符串及其值除image=http://some_url.jpg(or .png)之外的任何内容

所以,你需要匹配它才能继续。这实际上取决于您希望匹配<some_url>的严格程度。

尝试以下方法:

RewriteCond %{QUERY_STRING} ^image=http://[a-z0-9.-]+/[\w/.-]\.(jpg|png)$

这不允许任何&#34;特殊&#34; URL中的字符,只是常规的a-z,A-Z,0-9,斜杠,点和超广。

更新要阻止(403 Forbidden)任何包含查询字符串中的URL但符合上述模式的请求,请尝试以下操作:

RewriteCond %{QUERY_STRING} https?://. [NC]
RewriteCond %{QUERY_STRING} !^image=http://[a-z0-9.-]+/[\w/.-]\.(jpg|png)$
RewriteRule ^ - [F]

在这个例子中,&#34;看起来像一个URL&#34;只是它包含http://https://

  

image=开始,以.jpg.png结尾。

如果你想更自由,那就试试吧:

RewriteCond %{QUERY_STRING} ^image=.+\.(jpg|png)$
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]

不太确定这个用意图,但[a-zA-Z0-9_]只匹配一个字符。