RewriteCond:检查 %{HTTP_REFERER} 是否包含或等于 %{REQUEST_URI}

RewriteCond:检查 %{HTTP_REFERER} 是否包含或等于 %{REQUEST_URI}

有没有办法检查RewriteCondReferer 是否包含请求的 URI 或者......

RewriteCond %{HTTP_REFERER} == 'host.com/' + %{REQUEST_URI} ...

我需要捕捉浏览者是否点击了页面上链接到同一页面的链接并RewriteRule据此进行更改。

答案1

是的,你可以构建一个状况这样做(虽然听起来有点奇怪,但是嘿)......

要检查用户是否“点击”了链接到同一页面的页面上的链接……换句话说,请求的主机 + URL 路径是否是 HTTP Referer 请求标头的子集,那么您可以使用 mod_rewrite 执行如下操作状况

RewriteCond %{HTTP_REFERER}@@%{HTTP_HOST}%{REQUEST_URI} ^https?://([a-z.-]+/[^?]*)(?:.*)@@\1$

只是@@一个在 URL 中没有出现的字符序列,并充当我们尝试匹配的两个部分之间的分隔符。

条件模式(regex) 使用反向引用 ( \1) 来检查 Referer 模式中捕获的子组是否与HTTP_HOST+匹配REQUEST_URI

如果您的网站仅支持 HTTPS,那么您可以?删除^https?://

请注意,这将明确忽略 HTTP_REFERER 上的任何查询字符串,而仅检查 URL 路径和主机名。

只需添加有关 HTTP Referer 请求标头的强制性说明...它不是 100% 可靠的。用户代理可能不会在需要时发送 Referer 标头,如果用户倾向于这样做,则很容易伪造它。

相关内容