为什么 HTACCESS RewriteCond %{HTTP_COOKIE} 仅适用于 php 而不适用于 html?

为什么 HTACCESS RewriteCond %{HTTP_COOKIE} 仅适用于 php 而不适用于 html?

我试图使用此代码重定向子文件夹中的所有直接访问

RewriteEngine on

RewriteCond %{HTTP_COOKIE} !user_cookie=[^;]
RewriteRule .* http://webhost.org/ [R=301,L]

我意识到它只适用于 OHP 文件,而不适用于 HTML 等其他文件。我尝试访问 PHP 文件的链接,它按预期工作,但当我访问带有.html扩展名的其他文件时,它不会重定向,就好像它忽略了 的条件一样.htaccess

我是新手.htaccess。我做错了什么?

服务器信息:

  • 全新安装 Vestacp
  • Apache/2.2.15(CentOS 6 x64)

答案1

您发布的代码不一定适用于“直接”请求。它适用于未设置 cookie(即未在CookieHTTP 请求标头中发回)的情况 - 这不是一回事。(假设您正在设置“会话”cookie?但是,浏览器对“会话”的定义各不相同,因此这些 cookie 最终可能会更加执着的比你预期的要多。

如果“仅适用于 PHP 文件,而不适用于 HTML 等其他文件”,则是因为浏览器Cookie出于某种原因没有发送针对 PHP 文件的 HTTP 请求标头。也许是 PHP 文件“不正确”,Cookie:应该发送标头 - 就像 HTML 文件一样?

.htaccessPHP 文件和 HTML 文件之间的差异可能由缓存、域和/或 URL 路径引起。这与您的脚本无关。

要检查“直接访问”,更常见的方法是检查Referer标头是否为空。但是,您使用的这种方法(以及任何方法)都不是完全可靠的。

相关内容