我的问题背景:我想将外部下载链接屏蔽为内部链接,并且只有在htaccess级别或使用PHP脚本登录的wp用户才能访问,但当发生重定向时,wordpress之外的访问者仍然可以通过将直接url粘贴到浏览器栏来访问下载链接。
我已尝试将此代码重定向到外部链接。
Redirect 301 /resources https://external.com/direct-download-link1
在访问直接下载链接(ourwebsite.com/resources)之前,脚本必须像中间人一样,并检查访问者是否登录到wordpress。
我想更改重定向的位置,让它转到一个PHP页面,在那里您可以加载WordPress并检查用户的角色,以确保他们已登录。
require(\'../wp-load.php\'); // modify to reflect where your PHP file is in relation to Wordpress
$roles = wp_get_current_user()->roles; // get current users role
if (!in_array(\'alloweduserrole\',$roles)) { // modify to match your roles that are allowed to download
header(\'Location: http://www.ourwebsite.com/\');
exit;
} // end of if user does not have the proper role
可以使用简单的php检查脚本开发上述代码。但不知道如何实现和更改哪些代码。
SO网友:Andrew Leach
我这样做的方式是.htaccess 检查WordPress登录的cookie是否存在,并将没有cookie的请求重定向到特定页面。这个.htaccess 文件应该在你的/resources 目录,使其仅适用于该文件夹和任何子文件夹。这是相关部分:
Options -Indexes
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !PHPSESSID= [OR]
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_xxxxxxxxxx=
RewriteRule .* https://example.com/members-information [L]
这将重定向其处理的任何请求(请求到
/resources 或内的目的地
/resources 不包括饼干)其他地方:在我的情况下
members-information 包含如何加入的详细信息的页面。
请注意xxxx 每次安装的更改:您需要检查您的cookie,以找出您的站点使用的价值。
还要注意this is as secure as I need it to be! 虽然cookie只能与它们关联的站点交换,但它们可以被欺骗。
这将满足那些试图/resources.
对于键入external 地址输入到他们的浏览器:您不控制对该域的请求。你不能阻止我打字wordpress.stackexhange.com 进入我的浏览器,或拦截到那里的请求。唯一可以做到这一点的方法是与外部网站所有者合作,后者可以对通过GET 请求检查请求是否来自您的站点-只有当他们登录到您的站点并且可以看到链接时,才能通过您的站点-但是HTTP_REFERER 标头可能被欺骗。