阻止注销用户使用.htaccess和PHP文件访问WordPress外部的目录

时间:2015-01-22 作者:melissa

我已使用中的以下代码成功阻止了基于用户cookie访问WordPress之外的文件夹目录。htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ – [L]

RewriteCond %{REQUEST_URI} ^.*docs/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /wp-login.php?redirect_to=%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我想让它更像this solution 让它加载一个php文件来检查用户是否登录并提供页面内容。我链接到的方法用于重定向,但我不确定如何修改代码以使其加载URL(而不是像编写代码那样的图像文件)。当我使用dl-file.php 按原样编码,URL加载为404。

我只是不擅长编写PHP,不知道如何将其修改为“加载URL”。有什么想法吗?

谢谢

1 个回复
SO网友:Jonathan Joosten

我喜欢你的解决方案从中检查coockie。htaccess这将提供比我的解决方案更快的加载解决方案。

.htaccess

<IfModule mod_rewrite.c> 
  RewriteEngine On
  # Rules to prevent php execution in uploads  
  RewriteRule ^(.*)/uploads/(.*).php(.?) - [F]  

  #redirect all FILES for login check (excluding PHP)  
  RewriteCond !^(.*)/uploads/([0-9]+/.*)\\.php(.?)$ - [NC]  
  RewriteRule ^(.*)/uploads/([0-9]+/.*)\\.* /wordpress/file.php?img=$2 [L]
</IfModule>
文件。php

<?php
// load wordpress
require_once(\'wp-load.php\');

if( is_user_logged_in() ):
    $file =  ABSPATH.\'/wp-content/uploads/\'.$_GET[\'img\'];
    if (file_exists($file)) 
    {
        $ftype = \'application/octet-stream\'; 
        $finfo = @new finfo(FILEINFO_MIME); 
        $fres = @$finfo->file($file); 
        if (is_string($fres) && !empty($fres)) { 
           $ftype = $fres; 
        } 
        header(\'Content-Type: \' . $ftype);
        header(\'Content-Length: \'.filesize($file));
        header(\'Content-Disposition: filename=\'.basename($file));
        send_nosniff_header();
        flush();
        readfile($file);
    }
    else
    {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        include( get_query_template( \'404\' ) );
    }
else:  
    auth_redirect();
endif;
die();
?>

结束