htaccess和PHP之间的重定向循环

时间:2011-11-05 14:06:05

标签: php .htaccess mod-rewrite redirect

这是我的文件夹结构:

---- 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 1index.php我做某事,然后重定向到原始文件downloads/download 1

这很好,但我不知道当HTTP引用者为.htaccess时,如何不在index.php中应用重写规则。
我尝试使用RewriteCond %{HTTP_REFERER} !^.*index\.php$ [NC],但它会循环播放。

1 个答案:

答案 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]