.htaccess 保护服务器文件夹免受未登录的WordPress用户访问

rjjhvcjd  于 2022-12-19  发布在  WordPress
关注(0)|答案(1)|浏览(159)

我有wordpress网站,隐藏某些链接在其职位,以非登录用户。链接到存储在服务器上的文件夹(没有什么太做的wp上传,所有手动上传)。例如-
http://domain.com/courses/course-one/index.html
我想确保http://domain.com/courses文件夹,使任何人直接键入或粘贴链接,或来自另一个网站没有访问里面的文件。
是否可以只允许当前登录到网站的用户访问?或者链接只有在从网站页面本身单击时才起作用?

9wbgstp7

9wbgstp71#

我能想到两种方法

使用cookies

正如funkysouls建议的那样,我们可以创建一个.htaccess文件来检查用户是否登录。例如:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx|)$
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . - [R=403,L]

这个.htaccess文件只是检查用户是否有一个名为“wordpress_logged_in”的cookie,如果没有“wordpress_logged_in”cookie,则会显示一个403 - forbiten页面。
这种方法的问题是cookies可以由客户端创建和修改,换句话说,用户可以简单地打开浏览器的存储器,创建一个同名的cookie,然后访问你的受保护文件,而无需登录wordpress。

使用PHP脚本

另一个解决方案是使用.htaccess文件“重定向”到php脚本。例如:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|jpeg|jpg|gif|png|bmp|pdf|doc|docx|ppt|pptx|)$
RewriteRule . http://<HOST>/<YOUR-PHP-FILE>.php?file=%{REQUEST_FILENAME}

注意,我们通过查询参数将文件名(REQUEST_FILENAME)传递给php文件。
在php文件中,您可以检查用户权限并将文件提供给用户:

<?php
define( 'WP_USE_THEMES', false );

# load wordpress functions. We need that to retrive loged user information
include('../../wp-load.php');

# get filename from query params
$filename = $_GET['file'];

# check if user is loged in
global $current_user;
get_currentuserinfo();
$can_access = ($user_level > 1);

# You could also check if the user is an adm
# $is_adm = current_user_can('administrator');

# Clean buffer management (prevent erros at file "generation")
while (ob_get_level()) {
   ob_end_clean();
}

if ($can_access){
        header('Content-Type: '.mime_content_type($filename));

        $read = readfile($filename);

        if (!$read){
                echo "error while loading the file";
        }
}else{
        echo "you can not access this file";
}

?>

相关问题