Вопрос или проблема
У меня в файле 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
. Ниже приведены шаги и рекомендации по решению этой проблемы.
Шаги для решения
-
Анализ текущего правила RewriteCond:
Убедитесь, что строка с условием не исключает PDF-файлы. В вашем куске кода они упоминаются какrobots\.txt\.pdf
, что может быть ошибкой. Ваше условие должно явно включать PDF-файлы следующим образом:RewriteCond $1 !^(index\.php|images|public|assets|uploads|themes|updates|asset|mob|robots\.txt|.*\.pdf)$
-
Добавление условий для проверки существования файла и исключение директорий:
Прежде чем применять редирект, важно удостовериться, что запрашиваемый ресурс существует и не является директорией:RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} !-d
-
Конфигурация кэширования:
Убедитесь, что секция<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 по модулю mod_rewrite
- Введение в переписывание URL
- Управление доступом и безопасность с mod_rewrite
Настройка Apache с помощью .htaccess
требует внимательности и понимания логики запросов внутри вашего приложения. Убедитесь, что все изменения соответствуют бизнес-логике вашего веб-приложения и не нарушают его функциональность.