我有以下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,请停止重定向过程”......这样做会更有意义吗?
答案 0 :(得分:0)
我不会将客户端重定向到其原始请求。我宁愿只是从脚本本身提供文件,例如(部分来自http://php.net/manual/en/function.readfile.php#example-2687)
$(document).on('change', '.desktop', function() {
$('#desktop').css({"width":"500"});
});
这样,您可以避免重定向循环,一次往返客户端,也可以更快地提供文件。