仅当用户登录到Wordpress网站时,如何才允许URL重定向?

时间:2019-05-16 20:22:17

标签: php wordpress .htaccess redirect url-rewriting

仅当用户登录到wordpress站点时,我才尝试允许url重定向(从/ dl url)。否则不允许。但是,无论我是否登录,单击这些URL时,它都“找不到页面”。

我在public-html级别上使用过此.htaccess代码:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} ^.*wordpress_logged_in.*$ [NC]
RewriteRule ^dl/?$ https://external.com/directdownload- [L,R=301]

我希望允许登录用户重定向到https://external.com/directdownload-链接,并且如果他们没有登录到wordpress,则不允许重定向(并将他们重定向到登录页面)。 但是,当我单击https://www.example.com/dl/23434234/link.html之类的链接时,无论已登录还是未登录,都转到“找不到页面”。 如何解决?

1 个答案:

答案 0 :(得分:0)

MOD重写(HTACCESS)发生在加载WP之前,因此没有办法告诉它们是否由WP进行了身份验证。您可能可以获取会话Cookie,但即使这只是会话ID,也无法通过HTACCESS对其进行处理

我要做的是创建一个简单的PHP页面,并在其中放入类似的内容(未经测试)。

download.php

//load WP without theme support or hooks etc.
define('WP_USE_THEMES', false);
require('./wp-load.php'); //location of this file may be different 

if(get_current_user_id()){
    //user has valid WP login session
    header('Location: {location of perl script}');
}else{
    //user is not logged in
    header('Location: {location to boot them to}');
}
exit; //just because

我会将这个文件与wordpress的index.php文件放在同一位置。因为wordpress HTACCESS具有以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f基本上说这不是真实文件,请继续。由于download.php是真实文件,因此不会像往常一样重定向到index.php。它将仅加载download.php。

在download.php中,我们加载了WP,因此无需转到index.php。这使我们可以完全控制代码,因为它不在wordpress中,但是我们仍然可以访问基本的wordpress函数来检查登录内容。

然后,根据服务器端是否已登录进行重定向。因此,在我有{location .... }的位置,您将放置在HTACCESS中的位置。

现在,如果您需要发送更多数据或具有许多下载链接,则可以使用GET的正常方式将信息传递给PHP

   download.php?filename=somefile.txt

然后,当您执行重定向时,可以使用$_GET['filename']来帮助构建下载路径。注意目录分隔符,因为它可能会引起DirectoryTransversal攻击。

https://en.wikipedia.org/wiki/Directory_traversal_attack

您还可以使用URL的URI部分。

   download.php/somefile.txt

还有$_SESSION['REQUEST_URI'],但是您可能需要做一些工作才能准确获得所需的内容。我无法知道那是什么,所以我只能提出一般性建议。

希望有帮助。