2015-10-05 11 views
19

Ich mache eine Website, die ich privat machen möchte. Der wichtigste Teil ist, dass die Bilder in der Domäne nicht gesehen werden können, ohne dass sich der Benutzer zuerst anmeldet. Also ich würde den gesamten Verkehr gerne www.DOMAINNAME.com/wp-admin (auch für Bilder) umgeleitet werden, wenn der Benutzer nicht angemeldet istMachen Sie private Bilder in Wordpress

Hier ist, was ich versucht habe.

1) Plugins. Ich habe sowohl Wordpress Force Login, das Plugin wp-require-login und eine ausprobiert.

2) Hinzufügen einer Funktion von this answer. Welche ist dies:

function is_login_page() { 
    return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); 
} 

function wpse_make_blog_private() { 
    if (! is_user_logged_in() && ! is_admin() && ! is_login_page()) { 
    global $wp_query; 
    $wp_query->set_404(); 
    } 
} 
add_action('wp', 'wpse_make_blog_private'); 

Nicht diese Dinge den Verkehr umleitet, wenn ich auf die direkte URL für das Bild (wie http://www.DOMAINNAME.com/uploads/2015/10/foobar.jpg) gehen.

Kann das gemacht werden?

----------------- EDIT 1 --------------

Mevius wies darauf hin, dass Wordpress nicht sein könnte geladen, wenn Sie die direkte URL zu einem Bild eingeben, so schlägt er vor, dass es auf Apache-Ebene erfolgen soll.

------------- ENDE EDIT 1 -----------

+2

Ich glaube nicht, dass WordPress sogar geladen wird, wenn Sie direkt auf ein Bild zugreifen (wie dies der Fall wäre, wenn Sie direkt zu einem anderen statischen Asset auf Ihrem Server navigieren würden). Möglicherweise müssen Sie dies auf der Apache-Ebene tun – rnevius

+0

Hmm ... Guter Punkt. Heißt das, dass du es zur htaccess-Datei hinzufügst, oder? Ich werde nur dieses Tag hinzufügen, auf diese Frage. – Zeth

Antwort

12

Sie können dies so kompliziert oder so einfach wie Sie möchten. Am einfachsten ist es, den Referrer wie von Hemnath Mouli vorgeschlagen zu überprüfen, aber das kann leicht verfälscht werden.

Wenn Sie jedoch wirklich tief gehen wollen ...;)

Verwenden .htacess Datei mit einem RewriteRule alle Bilder in einen PHP-Skript neu zu schreiben, der Schopf aus dem Sumpf Wordpress und den Authentifizierungsstatus des Benutzers überprüft. Außerdem sollten Sie Ihrem Bilderordner eine .htaccess-Datei hinzufügen, um den direkten Zugriff auf den Ordner zu verweigern, um Randfälle auszuschließen.

WARNUNG: DIESER CODE IST NUR KONZEPT BEWEISEND, UM SIE ZU STARTEN !!

.htaccess

RewriteRule ^(.*\.(jpg|gif|png))$ isAuthenticated.php?path=$1

isAuthenticated.php

require_once("wp-blog-header.php"); 

$allowedExtensions = array("jpg", "gif", "png"); 

$path = $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR.$_REQUEST["path"]; 
$pathInfo = pathinfo($path); 

// Check if the Wordpress user is logged in and if the file extension is allowed 
// @see https://codex.wordpress.org/Function_Reference/is_user_logged_in 
if (!is_user_logged_in() || !in_array($pathInfo["extension"], $allowedExtensions)) { 
    header("HTTP/1.1 403 Forbidden"); 
    exit; 
} 

if(!file_exists($path)) { 
    header("HTTP/1.1 404 Not Found"); 
    exit; 
} 

// Display the file and set the correct mimetype 
$resource = finfo_open(FILEINFO_MIME_TYPE); 
$mimetype = finfo_file($resource, $path); 
finfo_close($resource); 

header("Content-Type: ".$mimetype); 
readfile($path); 
+3

+1 Das ist der Weg zu gehen, wenn Sie nichts über das aktuelle System ändern wollen. Jedenfalls ist es besser, am Anfang "private" Dateien außerhalb des öffentlichen Bereichs zu platzieren, aber das ist fast das gleiche Ergebnis wie dieses –

9

Verwenden .htaccess

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F] 

Returns 403, wenn Sie Zugriff auf Bild direkt, sondern ermöglicht es ihnen, auf der Seite angezeigt werden.

+0

Wirklich? Hast du das versucht? Ich frage aus Neugier. –

+0

Dies ist definitiv eine naive Lösung, Sie können sich nicht darauf verlassen –

1

Verwendung.htaccess

Verwandte Themen