2015-10-05 11 views
19

私はプライベートにしたいサイトを作っています。最も重要な部分は、ユーザーが最初にログインすることなく、ドメイン上の画像を見ることができないことです。 ユーザーがログインしていないのであれば、私は、(また、画像用)www.DOMAINNAME.com/wp-adminにリダイレクトされるすべてのトラフィックをしたいと思いWordpressで画像を非公開にする

をここに私が試したものです:。

1)プラグイン。私はWordpress Force Login、プラグインwp-require-loginComing soon page and Maintenance modeの両方を試しました。

2)this answerからの関数の追加。このどちらである:これらの事の

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'); 

ノン私は(そのようhttp://www.DOMAINNAME.com/uploads/2015/10/foobar.jpgなど)の画像の直接URLに行けば、トラフィックをリダイレクトします。

できますか?

----------------- EDIT 1つの--------------

マイルドセブンは、Wordpressのはないかもしれないことを、指摘しましたあなたがイメージに直接URLを入力すると、彼はそれがApacheレベルで行われるべきであると提案しています。 EDIT 1 -----------

+2

イメージに直接アクセスするとWordPressが読み込まれるとは思わない(サーバー上の他の静的資産に直接ナビゲートした場合など)。あなたはApacheレベルでこれをしなければならないかもしれません – rnevius

+0

うーん...良い点。それはhtaccessファイルに追加することを意味しますか?私はこの質問にこのタグを追加するだけです。 – Zeth

答えて

12

あなたはこれを必要に応じて複雑にも簡単にもできます。最も簡単なのは、Hemnath Mouliが提案したように参照元を確認することですが、簡単に偽装することができます。

しかし、あなたが本当に深い...行きたい場合は、ユーザーの認証ステータスをチェックWordpressのブートストラップおよびPHPスクリプトにすべての画像を書き換えるためのRewriteRuleで)

使用.htacessファイルを。また、.htaccessファイルを画像フォルダに追加して、フォルダへの直接アクセスを拒否して、エッジケースを除外する必要があります。

警告:このコードは、あなたがスタートしたことを証明するものです!

の.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現在のシステムについて何も変更したくないときに行く方法です。とにかく、「プライベート」ファイルを最初から公開範囲外に置く方が良いですが、それはこのファイルとほぼ同じ結果です –

9

使用.htaccess

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

あなたが画像を直接アクセスする場合は403を返しますが、それらは、サイト上に表示することができます。

+0

本当ですか?これを試しましたか?私は好奇心を求めています。 –

+0

これは間違いなく純粋な解決策です。あなたはそれに頼ることはできません。 –

1

使用。htaccess

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