Могу ли я использовать перезапись URL, чтобы скрыть реальный URL файла? - PullRequest
2 голосов
/ 31 марта 2011

Если у меня есть файл, расположенный по адресу http // site.com / files / foo.zip.

Как мне переписать этот URL-адрес на http://site.com/download/foo.zip,, чтобы реальный URL-адрес вообще не отображался в браузере / диспетчере загрузки пользователя?

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

Я предполагаю, что у вас есть Apache и означает .htaccess.

RewriteEngine On
RewriteRule ^download/(.*)$ files/$1 [R,L]

В противном случае, если вы хотите использовать PHP, вам все равно придется отправлять эти запросы в сценарий PHP с перезаписью URL.

Обновление

Я хочу ограничить доступ к загрузке только для зарегистрированных пользователей.

Это не сработает, лучше всего переместить эти файлы выше корня документа и обслуживать их через PHP.

Например ...

<?php
// Get into your system's context so we can determine if the user is logged in.
include 'everything.php';

if ( ! $loggedIn) {
   die('Log in mate!'); // Handle this somewhat better :)
}

$file = $_GET['file'];

// Get real path for $file.
$file = basename(__FILE__) . '/above/doc/root/files/' . $file;

if ( ! file_exists($file)) {
   die('This file does not exist!'); // And handle this better too.
}

header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
2 голосов
/ 31 марта 2011

Для файлов среднего размера я бы также предпочел скрипт загрузки.Это проще в настройке.

Но вы все равно можете использовать подход RewriteRule с некоторыми мошенничеством.Это требует, чтобы вы создали временные файлы авторизации из PHP:

 if ($user_is_authenticated) {
     touch("tmp/auth-{$_SERVER['REMOTE_ADDR']}");
 }

Затем вы можете защитить real папку загрузки с помощью этого простого правила:

 RewriteCond  ../tmp/auth-%{REMOTE_ADDR}   !-f
 RewriteRule  .+\.zip   /denied.html

Этот подходвлечет за собой некоторые накладные расходы на управление.- Вам нужно время от времени очищать эти файлы статуса авторизации (cronjob).Также использование IP-адресов не является оптимальным подходом.Это возможно и с сеансовыми cookie-файлами, но более сложное: Лучшая стратегия для защиты загружаемых файлов -php / mysql Apache2 server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...