Перенаправить (переписать?) Все запросы .PDF на сервере Apache в файл .php - PullRequest
2 голосов
/ 18 июля 2011

Итак, я создаю приложение, которое требует перенаправления (или это перезапись? Мне нужно сделать то, где URL остается неизменным на стороне клиента) в файл .php для всех запросов, которые происходят для файлов .pdf вданный каталог на моем веб-сервере (Apache).Однако я хочу, чтобы этот запрос был переписан только в том случае, если пользователь пытается отобразить PDF-файл в браузере (не загружая его).У меня такое чувство, что вторая часть невозможна.

Есть ли у кого-нибудь хорошие ресурсы для изучения, которые описывают не только синтаксис, который мне нужно будет использовать, но и то, что происходит за кулисами с Apacheсервер?

Кроме того, кто-нибудь имеет представление о том, как я могу определить, загружается ли файл напрямую или запрашивается через веб-браузер?У меня есть ощущение, что, поскольку при доступе к файлу PDF через браузер, кажется, что он загружается и отображается с помощью плагина Adobe Reader, между ними нет никакого различия.

С уважением,

Ответы [ 2 ]

4 голосов
/ 18 июля 2011
<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On

   # only if not an actual file exist
   RewriteCond %{REQUEST_FILENAME} !-f

   # only if not an actual directory exist
   RewriteCond %{REQUEST_FILENAME} !-d

   RewriteRule /your-directory/path/(.+)\.pdf $1.php [NC,L]
</IfModule>

1.Это переписывает.

2.Там нет различий между просмотром и загрузкой.Если запрос получен вашим сервером Apache, он даст ответ.Ответ будет тем, что выведет ваш PHP-скрипт.Обновление: @corretge дал вам ответ, связанный с этим.Я думаю, что не совсем надежно полагаться на заголовки, отправленные клиентом, но вы можете попробовать это решение.

3.Здесь вы можете узнать о Apache's mode_rewrite

2 голосов
/ 18 июля 2011

Не проверено, но вы также можете попробовать:

RewriteRule ^(.+)\.pdf$  /downloadPdf.php?pdf=$1.pdf [L,NC,QSA]

И в запросе сценария /downloadPdf.php для заголовков HTTP с помощью headers_list (), если они есть:

header("Content-Type: application/force-download");
header("Content-Type: application/download");

Если имеются заголовки загрузки, отправьте файл с

  header("Content-Disposition: attachment; filename=\"" . stripslashes($this->ubqDoc[$this->camp]['name']) . "\"");

И заголовками принудительной загрузки.

В противном случае отправьте файл с этим заголовком

  header("Content-Disposition: inline; filename=" . stripslashes($this->ubqDoc[$this->camp]['name']));

Вам нужно управлять другими заголовками, такими как Content-Type и Content-Lenght

Прочитайте руководство fpassthru PHP об отправке файлов из PHP.

...