MOD Rewrite (HTACCESS) происходит задолго до загрузки WP, поэтому нет никакого способа узнать, аутентифицированы ли они WP или нет.Вы можете получить Session Cookie, возможно, но даже это всего лишь Session 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
Я бы поместил этот файл в то же место, что и файл index.php для wordpress.Потому что 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.
Теперь, если вам нужно отправить больше данных или иметь много ссылок для скачивания, вы можете передавать информацию обычным способом, как вы делаете это в PHPиспользуя GET
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']
, но вам, возможно, придется проделать определенную работу, чтобы получить именно то, что вам нужно.У меня нет возможности узнать, что это такое, поэтому я могу только делать общие предложения.
Надеюсь, это поможет.