У меня есть приложение Vue JS со стандартным правилом Apache, позволяющим передавать URL-адреса SEO или пути "HTML5 History Mode" в маршрутизатор приложения. Он обслуживает реальные существующие файлы напрямую и обращается к приложению для любых других путей, которые могут привести к 404. Поэтому все 404 сожрены приложением.
У меня есть папка мультимедиа, и если у меня есть Отсутствующее изображение или аудиофайл. К сожалению, файл 404 для этого файла также передается в маршрутизатор приложения, который сам не знает, что делать с медиа-путем.
Текущая конфигурация Apache:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Моя структура папок выглядит следующим образом:
index.html
media/images/file1.jpg
media/images/file2.jpg
media/images/file4.jpg <--- oops missing 3.jpg
media/audio/etc
В настоящее время, если вы нажмете media/images/file3.jpg
, вы получите ответ HTTP 200 и страницу приложения по умолчанию / 404 в HTML. Очевидно, что это не то, что браузер ожидает при рендеринге изображения.
Я хочу сказать Apache:
- Если это реальный файл, затем подайте его напрямую
- Если он находится на носителе / и отсутствует, тогда подайте 404
- Остальное переписать в индекс. html
Это Шаг 2 Мне нужна конфигурация Apache для.
Что я пробовал
Ссылаясь на https://httpd.apache.org/docs/current/mod/mod_rewrite.html и различные другие вопросы например, этот .
Я пытался исключить папку мультимедиа из условия перезаписи, думая, что тогда она перейдет к нормальной обработке файла:
RewriteCond %{REQUEST_URI} !^/media
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
И это теперь возвращает 404 для отсутствующего файла, который является прогрессом, но все же передает обработку приложению и возвращает тело HTML. (Я не совсем понимаю, как это может сделать оба варианта.)
Я также попробовал отдельное правило перед тем, как обрабатывать носитель отдельно, поэтому выполняется на 200 или 404 - правило «не переписывать».
RewriteRule ^/media(.*) - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
Но, похоже, это ничего не дало, и я вернулся к ответу 200 и телу приложения.