修复Apache Inifinte循环 - 确定引用

时间:2016-08-29 14:41:40

标签: php wordpress apache .htaccess

我有以下Apache配置设置:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} wp-content/uploads/gravity_forms
RewriteRule .* /cmssystem46/wp-content/uploads/test_script.php [L]
</IfModule>

在我的/cmssystem46/wp-content/uploads/test_script.php文件中,我设置了以下代码:

<?php 
/* Short and sweet - load the bare-bones of WordPress*/
define('WP_USE_THEMES', false);
require('../../wp-blog-header.php');



if ( !is_user_logged_in() ) {
    auth_redirect(); // THIS PART WORKS ALREADY
}else{
    $a = explode ('/', $_SERVER['REQUEST_URI']);
    array_shift($a);
    array_shift($a);
    $c = implode('/', $a);
    header('Location: '.get_site_url().'/'.$c.'');
    exit();
}

你看到了问题吗?位于wp-content / uploads / gravity_forms / *的资源与test_script.php文件之间存在无限循环。

我需要解决这个问题。从概念上讲,这听起来很简单:我添加了一个新的Apache规则,如下所示:

RewriteCond %{HTTP_REFERER} /cmssystem46/wp-content/uploads/test_script.php
RewriteRule .* - [L] # i.e. don't do anything if the php script is redirecting back to this resource.

......但是这不起作用。非常感谢您的帮助!

简要背景

我的任务是保护wp-content / uploads / gravity_forms文件夹,以便只有经过WordPress身份验证的用户才能访问其文件/媒体。

Apache .htaccess rewriterules(上图)说“对wp-content / uploads / gravity_forms目录的任何HTTP请求都应该定向到wp-content / uploads / test_script.php文件进行处理。”

一旦用户访问test_scirpt.php文件,就会检查他们是否登录到WP,如果没有,则会将他们定向到WordPress登录屏幕。所有这一切都有效。

如果他们在WordPress中经过身份验证,他们会被重定向回他们试图请求的原始wp-content / uploads / gravity_forms / *文件。

这是我上面粘贴的代码的解释。

现在发生的事情是PHP文件和Apache htaccess文件正在互相结合使用;我需要告诉Apache“如果刚刚调用wp-content / uploads / gravity_forms / *的引用者是test_script.php,请停止重定向过程”......这样做会更有意义吗?

1 个答案:

答案 0 :(得分:0)

我不会将客户端重定向到其原始请求。我宁愿只是从脚本本身提供文件,例如(部分来自http://php.net/manual/en/function.readfile.php#example-2687

$(document).on('change', '.desktop', function() {  
            $('#desktop').css({"width":"500"}); 
    });

这样,您可以避免重定向循环,一次往返客户端,也可以更快地提供文件。