it-swarm.com.de

Blockieren Sie den Zugriff abgemeldeter Benutzer auf Verzeichnisse außerhalb von WordPress mit .htaccess und PHP Datei

Ich habe den Zugriff auf ein Ordnerverzeichnis außerhalb von WordPress basierend auf Benutzercookies mit dem folgenden Code in der .htaccess-Datei erfolgreich blockiert:

# 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

Ich versuche es mehr wie diese Lösung zu machen, damit es eine PHP-Datei lädt, um zu prüfen, ob der Benutzer angemeldet ist und den Seiteninhalt zu bedienen. Diese Methode, auf die ich verweise, funktioniert, um umzuleiten, aber ich bin nicht sicher, wie ich den Code ändern soll, damit er die URL lädt (keine Bilddatei, für die der Code geschrieben wurde). Wenn ich die Datei dl-file.php code so wie sie ist verwende, wird die URL als 404 geladen.

Ich bin nur nicht in der Lage, PHP zu schreiben, um zu wissen, wie man es ändert, um 'URL laden' zu sagen. Irgendwelche Gedanken?

Vielen Dank.

2
melissa

Ich finde es gut, wenn Ihre Lösung das Cookie aus der .htaccess-Datei überprüft. Dies ergibt eine viel schnellere Ladelösung als meine Lösung.

.zugang

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

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