Как разрешить файлы pdf в .htaccess?

Вопрос или проблема

У меня в файле htaccess есть следующий код, но он не позволяет открывать pdf-файлы, перенаправляет на страницу 404. Как я могу разрешить открытие pdf-файлов на основе моего htaccess файла?

RewriteEngine on
RewriteCond $1 !^(index\.php|images|public|assets|uploads|themes|updates|asset|mob|robots\.txt\.pdf)
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
<FilesMatch "\.(jpg|jpeg|png|gif|swf|pdf|css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

Я очень ценю вашу помощь. Спасибо

Похоже, что ваша RewriteCond вовсе не соответствует *.pdf файлам. Попробуйте добавить следующий шаблон в ваш RewriteCond.

|(.+)\.pdf

Посмотрите на ссылки, которые я привел ниже. В той или иной степени форма RewriteCond зависит от версии Apache, используемой на вашем сервере. Ссылки содержат хорошо написанные примеры.

По соображениям безопасности (в зависимости от приложения, которое вы хотите обслуживать и его логики) я бы добавил еще несколько условий перед переписыванием. Проверка, существует ли ваш файл и не является ли он каталогом. Но, как я сказал, все зависит от логики приложения.

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d

Ссылки:

Ответ или решение

Чтобы разрешить открытие PDF-файлов на сервере Apache с помощью файла .htaccess, необходимо внести корректировки в уже существующий код. Ваш текущий код, судя по всему, перенаправляет все URL, кроме указанных в условиях RewriteCond, на страницу 404. Ниже приведены шаги и рекомендации по решению этой проблемы.

Шаги для решения

  1. Анализ текущего правила RewriteCond:
    Убедитесь, что строка с условием не исключает PDF-файлы. В вашем куске кода они упоминаются как robots\.txt\.pdf, что может быть ошибкой. Ваше условие должно явно включать PDF-файлы следующим образом:

    RewriteCond $1 !^(index\.php|images|public|assets|uploads|themes|updates|asset|mob|robots\.txt|.*\.pdf)$
  2. Добавление условий для проверки существования файла и исключение директорий:
    Прежде чем применять редирект, важно удостовериться, что запрашиваемый ресурс существует и не является директорией:

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} !-d
  3. Конфигурация кэширования:
    Убедитесь, что секция <FilesMatch> включает PDF-файлы и правильно настроена:

    <FilesMatch "\.(jpg|jpeg|png|gif|swf|pdf|css)$">
    Header set Cache-Control "max-age=604800, public"
    </FilesMatch>

Полное содержание файла .htaccess

Теперь ваш файл .htaccess должен выглядеть следующим образом:

RewriteEngine on

# Исключаем pdf из правил перезаписи
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|public|assets|uploads|themes|updates|asset|mob|robots\.txt|.*\.pdf)$

RewriteRule ^(.*)$ index.php?/$1 [QSA,L]

# Настройка кэширования для статических ресурсов
<FilesMatch "\.(jpg|jpeg|png|gif|swf|pdf|css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

Рекомендации

  • Проверка Apache версии: Обратите внимание, что синтаксис и функциональность могут отличаться в зависимости от версии Apache. Проверьте, что ваша версия располагает необходимыми модулями для работы с правилами rewrite.

  • Безопасность: Убедитесь, что файл .htaccess настроен так, чтобы не открывать доступ к конфиденциальным PDF-документам при отсутствии соответствующих разрешений.

Ресурсы

Настройка Apache с помощью .htaccess требует внимательности и понимания логики запросов внутри вашего приложения. Убедитесь, что все изменения соответствуют бизнес-логике вашего веб-приложения и не нарушают его функциональность.

Оцените материал
Добавить комментарий

Капча загружается...