web-dev-qa-db-ja.com

.htaccessとを使用して、WordPress以外のディレクトリへのログアウトしたユーザーアクセスをブロックする PHP ファイル

.htaccessファイルの次のコードを使用して、ユーザーCookieに基づいてWordPressの外部のフォルダディレクトリへのアクセスをブロックしました。

# 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

私はそれをもっと似たものにしようとしています この解決策 ユーザーがログインしているかどうかをチェックするためにphpファイルをロードしてページコンテンツを提供するようにすること。私がリンクしているそのメソッドはリダイレクトするために働くが、私はそれがURLをロードするようにコードを修正する方法がわからない(コードのために書かれたような画像ファイルではない)。 dl-file.php codeをそのまま使用すると、URLは404として読み込まれます。

'[URLを読み込む]と言うように修正する方法を知るためにPHPを書くのには熟練していません。何かご意見は?

ありがとう。

2
melissa

私はあなたのソリューションが.htaccessからcoockieをチェックするのが好きです。

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

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