【发布时间】:2021-05-30 08:14:31
【问题描述】:
在 htaccess 中,我如何阻止除来自特定域的访问者之外的所有访问者
我试过了,但没有成功:
# serve everyone from specific-domain or specific-user-agent
RewriteCond %{HTTP_REFERER} ^https?://www.specific-domain.com
RewriteRule ^ - [L]
# everybody else receives a forbidden
RewriteRule ^ - [F]
ErrorDocument 403 /forbidden.html
更新:我在下面的代码中取得了一定的成功,但它肯定会破坏我的网页,因为以下参数会覆盖或干扰外观。如果有人知道如何订购它的好方法?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https://authorizedreferer.com
RewriteRule ^ - [L]
RewriteRule ^ https://unprotected.mydomain.com/ [R,L]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
【问题讨论】:
-
来自您自己域的请求呢?直接请求呢?
-
暂时忘记
.htaccess...在尝试在.htaccess中实现某些内容之前,您需要掌握HTTP 请求的情况。您的网站是否只是一个没有静态资产(CSS、JS、图像等)的页面?如果不是,那么当用户请求您网站的页面时,您的网站本身将在请求静态资产时生成Referer标头。另外,直接请求和其他未设置Referer的请求呢?你可以屏蔽这些吗? -
旁白:您添加的第二个代码块没有多大意义?你用的是前置控制器吗?
-
“我试过这个但没有成功” - 你的具体意思是什么?究竟会发生什么?第一个代码块应该做你所要求的,即。阻止所有请求,除非
RefererHTTP 请求标头不以指定的 URL 开头。但是,这可能不是您应该做的全部(正如我在上面的第一条评论中所询问的那样)。 -
事实是,如果我在第一个块中评论 #RewriteRule ^ - [F] 我的主页以 css 样式返回,但是引用限制已经消失(你现在必须明白,我不知道知道为什么 ;-) ) @MrWhite
标签: .htaccess restrict referer