尝试从另一个网站打开网站上的网页时禁止 403
403 forbidden while trying to open a webpage on a website from another website
我在 Gitlab 页面上托管了一个静态网页。网页的URL为myname.gitlab.io
我有另一个网站由 hostgator
托管,其中有 URL "mysecondwebsite.com"
。 "mysecondwebsite.com"
在 "mysecondwebsite.com/charts/folder1/1.html"
、"mysecondwebsite.com/charts/folder1/2.html"
、"mysecondwebsite.com/charts/folder1/3.html"
等各种路径上托管了数千个静态 html 页面。
我不希望 "mysecondwebsite.com"
可以直接访问,也不想访问其中的页面。因此,我启用了按预期工作的热链接保护。现在,我还想允许访问 "mysecondwebsite.com"
ONLY FROM myname.gitlab.io
。该网站有超链接列表,单击这些超链接会在 "mysecondwebsite.com"
中打开一个适当的页面。为此,我在 hostgator 上的 .htaccess
文件中输入了以下内容,但没有帮助。我看到 403 禁止
# IP to allow
order allow,deny
deny from all
allow from gitlab.io
当前防盗链设置-
# DO NOT REMOVE THIS LINE AND THE LINES BELOW HOTLINKID:r2xGl7fjrh
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mysecondwebsite.com/.*$ [NC]
RewriteRule .*\.(.*|jpg|jpeg|gif|png|bmp|tiff|avi|mpeg|mpg|wma|mov|zip|rar|exe|mp3|pdf|swf|psd|txt|html|htm|php)$ https://mysecondwebsite.com [R,NC]
# DO NOT REMOVE THIS LINE AND THE LINES ABOVE r2xGl7fjrh:HOTLINKID
我绝不是网络托管方面的专家。请给我一些帮助来使它正常工作。
UDPATED htaccess
Options All -Indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://((myfirstwebsite\.com)|((www\.)?mysecondwebsite\.com))/ [NC]
RewriteRule .* - [F]
HTTP LIVE HEADER DUMP
https://mysecondwebsite.com/charts/thisfolder/thisfile.html
Host: mysecondwebsite.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Alt-Used: mysecondwebsite.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
GET: HTTP/2.0 403 Forbidden
cache-control: private, no-cache, no-store, must-revalidate, max-age=0
pragma: no-cache
content-type: text/html
content-length: 699
date: Wed, 06 Apr 2022 07:13:17 GMT
server: LiteSpeed
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
X-Firefox-Spdy: h2
---------------------
https://mysecondwebsite.com/favicon.ico
Host: mysecondwebsite.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Alt-Used: mysecondwebsite.com
Connection: keep-alive
Referer: https://mysecondwebsite.com/charts/thisfolder/thisfile.html
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
GET: HTTP/3.0 404 Not Found
content-type: text/html
last-modified: Mon, 28 Mar 2022 13:48:20 GMT
etag: "999-6241bca4-dfd29bee5117e228;br"
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 911
date: Mon, 04 Apr 2022 10:11:14 GMT
server: LiteSpeed
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
X-Firefox-Http3: h3
---------------------
allow from gitlab.io
对 http referer header 不起作用,就像您所期望的那样。相反,它基于发出请求的用户的 IP 地址工作。
相反,您想使用某些东西来检查引荐来源网址,并在 不 包含 myname.gitlab.io
或您自己网站的主机名时拒绝访问。您可以通过在 .htaccess
文件中放置以下内容来使用 mod_rewrite
做到这一点:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://((myname\.gitlab\.io)|((www\.)?mysecondwebsite\.com))/ [NC]
RewriteRule .* - [F]
这将允许来自您的 gitlab 站点的引荐来源网址,然后将允许这些页面获取更多资源,例如图像、js 和 css。在这条规则中:
RewriteEngine on
- 打开重写,这需要在您的 .htaccess
中指定一次,并在所有重写规则和条件之间共享
RewriteCond
- 指定下一个重写规则的条件
!
表示下面的正则表达式应该取反(不匹配)
^
是正则表达式的开头
NC
是“不区分大小写”,这意味着该规则不区分大小写,并且适用于 upper-case 和 lower-case 输入
RewriteRule
是实际规则
.*
表示它匹配所有 URL(在这种情况下,上面指定的条件很重要)
-
表示没有目的地URL
F
表示它应该显示“禁止”状态,而不是重定向或在内部更改 URL.
这种方法的问题是它会禁止一些实际上是从 gitlab 引用的请求。并非所有浏览器实际上在所有情况下都发送引用 header。
Please could you share what the exception rule script is that you're thinking?
这只是@StephenOstermiller 出色回答的替代方案...
您可以改为保持现有的“热链接保护”脚本不变,该脚本由您的控制面板 GUI 生成(并根据需要通过 GUI 进行任何更改)。但是在 之前 您的热链接保护包括一个额外的规则,以便为您需要授予访问权限的任何域设置例外。
# Abort early if request is coming from an "allowed" domain
RewriteCond %{HTTP_REFERER} ^https://myname\.gitlab\.io($|/)
RewriteRule ^ - [L]
# Normal hotlink-protection follows...
这可以防止当请求来自允许的域时处理热链接保护。所以允许访问。
这确实假定您没有其他应按照此规则处理的指令。
我在 Gitlab 页面上托管了一个静态网页。网页的URL为myname.gitlab.io
我有另一个网站由 hostgator
托管,其中有 URL "mysecondwebsite.com"
。 "mysecondwebsite.com"
在 "mysecondwebsite.com/charts/folder1/1.html"
、"mysecondwebsite.com/charts/folder1/2.html"
、"mysecondwebsite.com/charts/folder1/3.html"
等各种路径上托管了数千个静态 html 页面。
我不希望 "mysecondwebsite.com"
可以直接访问,也不想访问其中的页面。因此,我启用了按预期工作的热链接保护。现在,我还想允许访问 "mysecondwebsite.com"
ONLY FROM myname.gitlab.io
。该网站有超链接列表,单击这些超链接会在 "mysecondwebsite.com"
中打开一个适当的页面。为此,我在 hostgator 上的 .htaccess
文件中输入了以下内容,但没有帮助。我看到 403 禁止
# IP to allow
order allow,deny
deny from all
allow from gitlab.io
当前防盗链设置-
# DO NOT REMOVE THIS LINE AND THE LINES BELOW HOTLINKID:r2xGl7fjrh
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mysecondwebsite.com/.*$ [NC]
RewriteRule .*\.(.*|jpg|jpeg|gif|png|bmp|tiff|avi|mpeg|mpg|wma|mov|zip|rar|exe|mp3|pdf|swf|psd|txt|html|htm|php)$ https://mysecondwebsite.com [R,NC]
# DO NOT REMOVE THIS LINE AND THE LINES ABOVE r2xGl7fjrh:HOTLINKID
我绝不是网络托管方面的专家。请给我一些帮助来使它正常工作。
UDPATED htaccess
Options All -Indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://((myfirstwebsite\.com)|((www\.)?mysecondwebsite\.com))/ [NC]
RewriteRule .* - [F]
HTTP LIVE HEADER DUMP
https://mysecondwebsite.com/charts/thisfolder/thisfile.html
Host: mysecondwebsite.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Alt-Used: mysecondwebsite.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
GET: HTTP/2.0 403 Forbidden
cache-control: private, no-cache, no-store, must-revalidate, max-age=0
pragma: no-cache
content-type: text/html
content-length: 699
date: Wed, 06 Apr 2022 07:13:17 GMT
server: LiteSpeed
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
X-Firefox-Spdy: h2
---------------------
https://mysecondwebsite.com/favicon.ico
Host: mysecondwebsite.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Alt-Used: mysecondwebsite.com
Connection: keep-alive
Referer: https://mysecondwebsite.com/charts/thisfolder/thisfile.html
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
GET: HTTP/3.0 404 Not Found
content-type: text/html
last-modified: Mon, 28 Mar 2022 13:48:20 GMT
etag: "999-6241bca4-dfd29bee5117e228;br"
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 911
date: Mon, 04 Apr 2022 10:11:14 GMT
server: LiteSpeed
content-security-policy: upgrade-insecure-requests
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
X-Firefox-Http3: h3
---------------------
allow from gitlab.io
对 http referer header 不起作用,就像您所期望的那样。相反,它基于发出请求的用户的 IP 地址工作。
相反,您想使用某些东西来检查引荐来源网址,并在 不 包含 myname.gitlab.io
或您自己网站的主机名时拒绝访问。您可以通过在 .htaccess
文件中放置以下内容来使用 mod_rewrite
做到这一点:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://((myname\.gitlab\.io)|((www\.)?mysecondwebsite\.com))/ [NC]
RewriteRule .* - [F]
这将允许来自您的 gitlab 站点的引荐来源网址,然后将允许这些页面获取更多资源,例如图像、js 和 css。在这条规则中:
RewriteEngine on
- 打开重写,这需要在您的.htaccess
中指定一次,并在所有重写规则和条件之间共享RewriteCond
- 指定下一个重写规则的条件!
表示下面的正则表达式应该取反(不匹配)^
是正则表达式的开头NC
是“不区分大小写”,这意味着该规则不区分大小写,并且适用于 upper-case 和 lower-case 输入RewriteRule
是实际规则.*
表示它匹配所有 URL(在这种情况下,上面指定的条件很重要)-
表示没有目的地URLF
表示它应该显示“禁止”状态,而不是重定向或在内部更改 URL.
这种方法的问题是它会禁止一些实际上是从 gitlab 引用的请求。并非所有浏览器实际上在所有情况下都发送引用 header。
Please could you share what the exception rule script is that you're thinking?
这只是@StephenOstermiller 出色回答的替代方案...
您可以改为保持现有的“热链接保护”脚本不变,该脚本由您的控制面板 GUI 生成(并根据需要通过 GUI 进行任何更改)。但是在 之前 您的热链接保护包括一个额外的规则,以便为您需要授予访问权限的任何域设置例外。
# Abort early if request is coming from an "allowed" domain
RewriteCond %{HTTP_REFERER} ^https://myname\.gitlab\.io($|/)
RewriteRule ^ - [L]
# Normal hotlink-protection follows...
这可以防止当请求来自允许的域时处理热链接保护。所以允许访问。
这确实假定您没有其他应按照此规则处理的指令。