Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 阻止所有人访问,除了特定推荐人的访客_.htaccess_Restrict_Referer - Fatal编程技术网

.htaccess 阻止所有人访问,除了特定推荐人的访客

.htaccess 阻止所有人访问,除了特定推荐人的访客,.htaccess,restrict,referer,.htaccess,Restrict,Referer,在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 Rewrite

在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>

重新启动发动机
重写cond%{HTTP_REFERER}^https://authorizedreferer.com
重写规则^-[L]
重写规则^https://unprotected.mydomain.com/ [R,L]
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
这确实会允许从
specific domain.com
(即此域是HTTP
引用者)链接的请求,并阻止其他所有内容。但是,它也会阻止对静态资源的所有请求,这些请求来自您的站点,您的域是
Referer
。因此,您还需要允许来自您的域的请求

您可能还应该允许一个空的
Referer
标题。即,当用户在其浏览器地址栏中键入URL时,直接请求。还要注意的是,
Referer
标题可以通过其他方式抑制,具体取决于发起网站设置的Referer策略。用户自己也可以覆盖
Referer
头,因此依赖
Referer
头是不可靠的

请尝试以下操作:

# Serve everyone from specific-domain (and internal requests)
RewriteCond %{HTTP_REFERER} ^https?://www\.your-domain\.com/ [OR] 
RewriteCond %{HTTP_REFERER} ^https?://www\.specific-domain\.com/
RewriteRule ^ - [L]

# everybody else receives a forbidden 
RewriteRule ^ - [F]
若要允许空的
引用程序
,请包括一个附加条件:

# Serve everyone from specific-domain (and internal requests and empty referer) 
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} ^https?://www\.your-domain\.com/ [OR] 
RewriteCond %{HTTP_REFERER} ^https?://www\.specific-domain\.com/
RewriteRule ^ - [L]

请注意,您当前正在
Referer
中允许
http
https
。如果这总是
https
,那么请具体说明并删除
(可选量词)。即
^https://www\.specific domain\.com/
。请记住对文字点进行反斜杠转义。

来自您自己域的请求如何?直接请求呢?暂时忘记
.htaccess
。。。在尝试在
.htaccess
中实现某些功能之前,您需要了解HTTP请求的情况。您的站点只是一个没有静态资产(CSS、JS、图像等)的页面吗?如果没有,那么当用户请求站点的页面时,站点本身将在请求静态资产时生成一个
Referer
标题。另外,直接请求和未设置
Referer
的其他请求如何?你能阻止这些吗?旁白:你添加的第二个代码块没有多大意义?您使用的是前端控制器吗?“我尝试过,但没有成功”-您的具体意思是什么?到底发生了什么?第一个代码块应该执行您要求的操作,即阻止所有请求,除非
Referer
HTTP请求头不以指定的URL开头。然而,这可能不是你应该做的全部(正如我在上面的第一条评论中所询问的)。事实上,如果我在第一块评论#RewriteRule^-[F]我的主页恢复了css风格,但是推荐人限制消失了(正如你现在必须理解的那样,我不知道为什么;-)@WhiteIt工作得很好…非常感谢,如果你有多一点时间给我,我会很感兴趣的是它是多么容易覆盖任何用户的参考标题?评估这种解决方案的可靠性意味着什么?用户可以安装浏览器扩展来覆盖/伪造
Referer
标题。网站/用户可以编写一个脚本来发出HTTP请求,并伪造
Referer
。推荐人策略不允许
Referer
被“伪造”(即设置为任意值),但可以抑制它。因此,如果您允许一个空的
推荐人
,那么其他网站只需设置一个严格的推荐人策略就可以访问。但是合法用户也可能会禁止使用
Referer
。因此,如果您阻止一个空的
引用程序
,您可能也会阻止合法用户。@怀特先生,很抱歉再次打扰您,但我发现一个问题,我不明白如何使用您的解决方案:当尝试访问我网站中的典型URL()时,我发现我可以无限制地访问它?是因为我没有设置空的referer吗?还是因为“页面”没有像html那样的扩展?如果你有暗示?感谢“在我的网站内”-你的意思是当你跟随网站上的一个内部链接到你网站上的另一个页面时?或者直接在浏览器地址栏中键入URL?但是,正如我在回答中所解释的,上述规则允许这两个请求。您可以进一步限制这一点,并且在请求静态资源时只允许您的域作为
Referer
,但这将阻止用户浏览您的站点,如果这是一项要求(除非您设置cookie或其他内容)。或者不允许使用空的
Referer
来阻止直接请求(第一个示例)-但是
Referer
标头可能会被用户阻止,因此您可能会阻止合法用户。澄清一下,这并没有提供任何真正的安全性,因为
Referer
头不可靠,很容易伪造。
# Serve everyone from specific-domain (and internal requests and empty referer) 
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} ^https?://www\.your-domain\.com/ [OR] 
RewriteCond %{HTTP_REFERER} ^https?://www\.specific-domain\.com/
RewriteRule ^ - [L]