这与以下情况完全相同:(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
答案 0 :(得分:0)
你的规则基本上适用于我,除了一件事:
(s)
没有按照您的想法行事。
RewriteCond %{HTTP_REFERER} !^http(s)://(www\.)?example\.com [NC]
使用括号,您可以定义一个组,此时此组没有任何意义。如果您删除(s)
,则适用于http。
如果你也想使用https,你必须这样写:
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
?
会使前面的字符(或括号中的组)可选。