【问题标题】:Apache RewriteRule to only allow whitelist URLsApache RewriteRule 仅允许白名单 URL
【发布时间】:2016-06-05 06:16:39
【问题描述】:

我有三种不同类别的 URL。每个类别都有一组我想要允许的特定 URL,其他所有内容都应该被禁止。这是为了锁定我的网站。

这些是我想出的类别和正则表达式。 我正在使用 Apache 2.4。

第一类:

http://example.org/foo
http://example.org/foo/bar
http://example.org/user
^/foo(/bar)?|user$

第二类:

http://example.org/baz/1?foo=bar
^/baz/[0-9]+\?foo=bar$

第三类:

http://example.org/search?bar=baz
^/search\?bar=baz$

以下是我根据上述提出的重写规则:

RewriteEngine On

# Category 1
RewriteCond %{REQUEST_URI} !^/foo(/bar)?|user$ [NC]
RewriteRule ^(.*)$ - [F]

# Category 2
RewriteCond %{REQUEST_URI} !^/baz/[0-9]+$ [NC]
RewriteCond %{QUERY_STRING} !^foo=bar$
RewriteRule ^(.*)$ - [F]

# Category 3
RewriteCond %{REQUEST_URI} !^/search$ [NC]
RewriteCond %{QUERY_STRING} !^b=bar$
RewriteRule ^(.*)$ - [F,L]

正则表达式对我来说看起来不错,但当我在 http://htaccess.madewithlove.be/ 测试它们时,我注意到 URL http://example.org/foo 将在类别 2 的表达式中被禁止。我理解为什么会发生这种情况,但我不确定如何解决这个问题。我可能在这里遗漏了一些东西,有人可以告诉我应该如何解决这个问题吗?

【问题讨论】:

    标签: apache mod-rewrite url-rewriting http-status-code-403 whitelist


    【解决方案1】:

    您应该先定义白名单,然后限制/禁止其他所有内容:

    RewriteEngine On
    
    RewriteRule ^(?:foo(?:/bar)?|user)/?$ - [L]
    
    RewriteCond %{QUERY_STRING} ^foo=bar$
    RewriteRule ^baz/\d+$ - [L]
    
    RewriteCond %{QUERY_STRING} ^b=bar$
    RewriteRule ^search$ - [L]
    
    RewriteRule ^ - [F,L]
    

    【讨论】:

    • 那是为了不捕获,对吧?是的,那也很好,谢谢。但这不会改变 URL http://example.org/foo 仍然会在 Category 2 的表达式上失败的事实。
    • 我在回复时确实尝试过。我提到的 URL 是白名单,因此在我的表达中是否定的。问题是,即使您已经进行了分组,它仍然会在类别#2 的表达式上失败(只是再次测试,以确保)。在这里亲自尝试一下:htaccess.madewithlove.be
    • @Housni 更新了上面的回复。请检查。很抱歉之前的混乱。
    • 没问题。我认为第一条规则应该有!,比如RewriteRule !^(?:foo(?:/bar)?|user)/?$ - [L]。但即便如此,如果你尝试http://example.org/foo,它仍然会在最后一个 RewriteRule 上失败。我显然在这里做错了什么:/谢谢。
    • @Housni 没有。使用当前规则,您首先允许所有列入白名单的地址,然后在最后阻止所有其他请求。由于您使用的是 Apache 2.4,请将所有 [L] 标志替换为 [END]
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2017-01-21
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多