我试图使用此代码重定向子文件夹中的所有直接访问
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(即未在Cookie
HTTP 请求标头中发回)的情况 - 这不是一回事。(假设您正在设置“会话”cookie?但是,浏览器对“会话”的定义各不相同,因此这些 cookie 最终可能会更加执着的比你预期的要多。
如果“仅适用于 PHP 文件,而不适用于 HTML 等其他文件”,则是因为浏览器Cookie
出于某种原因没有发送针对 PHP 文件的 HTTP 请求标头。也许是 PHP 文件“不正确”,Cookie:
应该发送标头 - 就像 HTML 文件一样?
.htaccess
PHP 文件和 HTML 文件之间的差异可能由缓存、域和/或 URL 路径引起。这与您的脚本无关。
要检查“直接访问”,更常见的方法是检查Referer
标头是否为空。但是,您使用的这种方法(以及任何方法)都不是完全可靠的。