Шаг 1:
Добавьте следующее в '.htaccess' всех поддоменов .
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s
RewriteCond %{QUERY_STRING} !key=(FgTyUeL)
RewriteRule ^(.*)$ http://www.example.com/?dwnld_file=server1/$1 [QSA,L]
В приведенном выше коде мы перенаправляем все файлы в основной домен, за исключением случаев, когда установлен параметр post . Например, http://server1.example.com/file.pdf
будет перенаправлен на http://www.example.com/?dwnld_file=server1/file.pdf
. Здесь server1
- это имя вашего субдомена, чтобы определить, если несколько субдоменов.
В состоянии перезаписи - RewriteCond %{QUERY_STRING} !key=(FgTyUeL)
, key
и его значение FgTyUeL
должны быть конфиденциальными и не стесняйтесь переходить на более сложные строки. Мы будем использовать это для доступа к файлу в WordPress.
Шаг 2:
Добавьте их в 'functions.php' вашей темы основной домен .
/* init hook to check whether user logged-in and pass to download function */
add_action( 'init', 'file_init' );
function file_init() {
if ($_REQUEST[ 'dwnld_file' ] != '') {
if ( ! is_user_logged_in() ) { // if not logged-in
auth_redirect(); //redirect to login page
// wp_redirect( 'http://www.example.com/login' ); // or some other page
exit;
}
else {
$spliturl = explode("/",$_REQUEST[ 'dwnld_file' ]);
$originalurl = "http://".$spliturl[0].".example.com/".substr($_REQUEST[ 'dwnld_file' ], strpos($_REQUEST[ 'dwnld_file' ], "/") + 1);
check_download_file( $originalurl ); // if logged-in pass file to download
}
}
}
/* function to download file */
function check_download_file( $url ) {
$key='?key=FgTyUeL'; // secure post key same as .htaccess
$file = basename($url);
$mime = wp_check_filetype( $file );
if( false === $mime[ 'type' ] && function_exists( 'mime_content_type' ) )
$mime[ 'type' ] = mime_content_type( $file );
if( $mime[ 'type' ] )
{
set_time_limit(0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url.$key);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$curl_response = curl_exec($ch);
curl_close($ch);
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
header('Cache-Control: private', false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="' . basename($url) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . strlen($curl_response)); // provide file size
header('Connection: close');
echo $curl_response;
die();
}
}
Вышеуказанные функции говорят сами за себя - мы проверяем аутентификацию WordPress и, если пользователь вошел в систему, мы добавим безопасный ключ и загрузим файл, используя cURL. Обратите внимание, что безопасный ключ должен совпадать с ключом в файле .htaccess вашего домена (ов).
Приведенная выше логика будет работать, если файл находится в любой папке вашего субдомена и даже в разных доменах (но должен быть общедоступным).