【问题标题】:Hotlink Protection not working with .htaccess热链接保护不适用于 .htaccess
【发布时间】:2017-05-17 15:01:32
【问题描述】:

我在服务器上安装了 WordPress MU,并使用了一些 Mod Deflate 和缓存文件以及 .htaccess 文件中的一些其他小修改,当我遇到客户端的一些修改时,我注意到在他的服务器上的图像是从我的服务器提供。

服务器配置:Plesk/CentOS - Linux 主机

经过全面研究后,我尝试将所有可用代码放在 StackOverflow 文章和其他教程和网站中,但找不到哪里做错了,但它不起作用。

.htaccess 与热链接正则表达式和其他重写规则

RewriteEngine On
RewriteRule ^index\.php$ - [L] 

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

<Files wp-config.php>  
       order allow,deny  
       deny from all  
</Files> 

<Files .htaccess>  
   order allow,deny  
   deny from all  
</Files> 

<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>

# Wordfence WAF
<Files ".user.ini">
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
</IfModule>
</Files>

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

如果我清空 .htaccess 并保留以下代码,它就可以工作。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

我做错了什么?

【问题讨论】:

  • 将此规则移动到第一行 RewriteEngine On 下方并使其生效。
  • 你会得到第 7 条规则的 index.php
  • @anubhava 当我从第二行添加这些规则时,我看到它的工作正常并且工作正常。您会详细说明可能的情况吗?在单独的答案中而不是评论中

标签: php apache .htaccess mod-rewrite hotlinking


【解决方案1】:

您需要将此HTTP_REFERER 置于所有其他规则之上。问题是您有将所有 URI 重写为 index.php 的规则。由于该规则 RewriteRule \.(jpg|jpeg|png|gif)$ 失败。

完成.htaccess:

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

RewriteRule ^index\.php$ - [L] 

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

<Files wp-config.php>  
       order allow,deny  
       deny from all  
</Files> 

<Files .htaccess>  
   order allow,deny  
   deny from all  
</Files> 

<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>

# Wordfence WAF
<Files ".user.ini">
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
</IfModule>
</Files>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多