微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

htaccess - 如何拒绝访问所有资源,期望从主机名和给定文件调用该资源

如何解决htaccess - 如何拒绝访问所有资源,期望从主机名和给定文件调用该资源

我有这个.htaccess:

# Rewrite URL
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  RewriteCond "%{HTTP_HOST}" "!^www.mydomain.com" [NC]
  RewriteCond "%{REQUEST_URI}" "!^/myfile.html" [NC]
  RewriteRule \.*$ - [F,NC]

</IfModule>

我希望拒绝访问所有资源,除外

  1. 来自 HTTP_HOST 的所有资源(例如 www.mydomain.com);
  2. 特定的给定文件(例如 myfile.html)。

上面的代码不起作用。因为我能解决吗? 谢谢

PS:换句话说,我想做类似的事情:

<?PHP

    if ( 
        $_SERVER["REMOTE_ADDR"] !== "www.mydomain.com" ||
        $_SERVER["REQUEST_URI"] !== "/myfile.html"
    ) {
        // redirect 403
    } 
} 

?>

解决方法

根据您的评论,我认为您需要检查推荐人。你可以试试这个规则:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_REFERER} !^$
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteCond %{REQUEST_URI} !/myfile\.html$ [NC]
RewriteRule \. - [F]

请记住,基于 HTTP_REFERER 的阻止不是很强的保护,因为客户端可以欺骗此标头。

测试 curl 命令:

curl --referer 'http://example.com/' -IL 'http://yourdomain.com/'

HTTP/1.1 403 Forbidden
Date: Thu,08 Apr 2021 09:28:17 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1j PHP/8.0.3
Strict-Transport-Security: max-age=31536000
Content-Type: text/html; charset=iso-8859-1

curl --referer 'http://yourdomain.com/' -IL 'http://yourdomain.com/'

HTTP/1.1 200 OK
Date: Thu,08 Apr 2021 09:27:47 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1j PHP/8.0.3
Strict-Transport-Security: max-age=31536000
X-Powered-By: PHP/8.0.3
Content-Type: text/html; charset=UTF-8

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。