这是我的文件夹结构:
---- downloads
---- .htaccess
---- index.php
---- download 1
---- download 2
---- download n
.htaccess内容:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^.*index\.php$ [NC]
RewriteCond $1 !^index.php$ [NC]
RewriteRule (.*) index.php?uid=$1 [L]
index.php内容:
<?php
// do stuff
header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
?>
我正在重定向每个下载请求,例如downloads/download 1
到index.php
我做某事,然后重定向到原始文件downloads/download 1
。
这很好,但我不知道当HTTP引用者为.htaccess
时,如何不在index.php
中应用重写规则。
我尝试使用RewriteCond %{HTTP_REFERER} !^.*index\.php$ [NC]
,但它会循环播放。
答案 0 :(得分:1)
如果HTTP引荐来源不以index.php
!^.*index\.php$
你做重定向。然而,在您提出的问题中,推荐人以downloads/download 1
结尾。
HTTP_REFERER
由您的浏览器设置。并且您的浏览器不会更新网址。
除此之外,即使您的浏览器已经完成,该网址仍然不会以index.php
结尾,而是index.php?uid=downloads%2Fdownload%201
。
因此,您必须重新考虑如何检查引荐来源以及如何更新引荐来源。也许使用重定向有助于:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^.*index\.php.*$ [NC]
RewriteCond $1 !^index.php$ [NC]
RewriteRule (.*) index.php?uid=$1 [R,L]