htaccess代码不起作用

时间:2016-02-19 07:50:03

标签: .htaccess mod-rewrite

这与以下情况完全相同:(htaccess) How to prevent a file from DIRECT URL ACCESS?

但是,答案提供的代码中没有一个适合我。我一个接一个地尝试,然后试图结合,但仍然不起作用。这是我的代码:

# prevent direct image url access
# ----------
    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)://(www\.)?example\.com [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)://(www\.)?example\.com.*$ [NC]

    # this not works
    RewriteRule \.(png|gif|jpe?g)$ - [F]

    # and this
    RewriteRule \.(png|gif|jpe?g)$ - [F,NC]

    # and this
    RewriteRule \.(png|gif|jpe?g)$ https://example.com/wp-login.php [NC,R,L]

    # even by combining them
# ----------
# /prevent direct image url access

案例模拟: index.php<img src="test.png" alt="">,通常可以访问。要求是:http://example.com/test.png不应该被访问。

我在wp-engine中使用WordPress,我认为WordPres的默认重写不会导致问题,因为答案中的代码放在WordPress重写之上。

更新

我在wp引擎上的Apache 2上使用PHP版本5.5.9-1ubuntu4.14

1 个答案:

答案 0 :(得分:0)

你的规则基本上适用于我,除了一件事:

(s)没有按照您的想法行事。

RewriteCond %{HTTP_REFERER} !^http(s)://(www\.)?example\.com [NC]

使用括号,您可以定义一个组,此时此组没有任何意义。如果您删除(s),则适用于http。

如果你也想使用https,你必须这样写:

RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]

?会使前面的字符(或括号中的组)可选。