web-dev-qa-db-fra.com

Bloquer l'accès des utilisateurs déconnectés au répertoire de WordPress à l'aide de .htaccess et PHP fichier

J'ai bloqué avec succès l'accès à un répertoire de dossiers en dehors de WordPress basé sur des cookies utilisateur à l'aide du code suivant dans le fichier .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

J'essaye de faire en sorte que cela ressemble davantage à cette solution de charger un fichier php pour vérifier si l'utilisateur est connecté et s'il sert le contenu de la page. Cette méthode à laquelle je me connecte fonctionne pour rediriger, mais je ne sais pas comment modifier le code pour lui faire charger l'URL (pas un fichier image comme le code a été écrit). Lorsque j'utilise le dl-file.php code tel quel, l'URL se charge en tant que 404.

Je ne suis tout simplement pas doué pour écrire PHP savoir comment le modifier pour qu'il dise 'charger l'URL'. Des pensées?

Merci.

2
melissa

J'aime votre solution en vérifiant le cookie à partir du fichier .htaccess, ce qui donnera une solution de chargement beaucoup plus rapide que ma solution.

.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>

fichier.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();
?>
2
Jonathan Joosten