Маскировка расширения .pdf с использованием .htaccess, избегая зацикливания

0

У меня есть немного глупая необходимость скрывать ссылки на файлы PDF в виде файлов PHP с именем файла PDF в качестве параметра.

Что-то вроде:

  1. Клиент запрашивает файл xxxx.pdf.
  2. Сервер получает запрос, но вместо возврата xxxx.pdf переходит на yyyy.php или любое другое расширение.
  3. yyyy.php имеет iframe, в который загружается файл PDF.

Дело в том, что мне удалось сделать точку 2. Но когда я пытаюсь сделать точку 3., она либо циклически, либо не находит файл.

Я думал о том, что пользовательское расширение "имитирует" другой файл, чтобы не циклически, но он все еще ездил на велосипеде.

У меня есть следующий.htaccess:

AddType application/pdf         .view
RewriteRule ^(.*)\.pdf$         yyyy.php?filename=$1 [L]
RewriteRule ^(.*)\.view$        $1.pdf [L]

Дело в том, что оно циклично, и я никуда не ухожу.

Я не очень хорош с.htaccess, так где я делаю это неправильно?

Теги:
pdf
.htaccess

2 ответа

0
Лучший ответ

Мне было проще просто перенаправить, когда я обнаружил расширение.pdf.

Поэтому я в основном сделал это:

  1. .htaccess обнаруживает расширение PDF и перенаправляет файл php, передавая имя файла без расширения в качестве параметра.
  2. Файл php использует имя файла и визуализирует PDF с помощью header и readfile чтобы избежать конфликтов с.htaccess.

Что-то вроде того:

.htaccess

RewriteRule     ^(.*)\.pdf$     /pdfreader/$1 [L,R=302,NC]
RewriteRule     ^pdfreader/(.*)?$           pdfreader.php?file=$1 [L,NC]

pdfreader.php

$file = $_GET["file"].".pdf";

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $file . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);
0

Вероятно, вам нужно добавить что-то, чтобы предотвратить yyyy.php обратно в файл php. Добавьте это перед правилом yyyy.php:

RewriteCond %{HTTP_REFERER} !yyyy\.php

Обратите внимание, что ссылки могут быть подделаны, так что это один из способов, которым люди смогут обойти файл yyyy.php.

  • 0
    Не работал для меня, продолжал ездить на велосипеде, я нашел более простое решение. Я собираюсь опубликовать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню