Αυτό το PHP script λειτουργεί ως ασφαλές proxy για την ανάκτηση και εξυπηρέτηση στατικών αρχείων (όπως εικόνες, CSS, JS, γραμματοσειρές και βίντεο) από τον ζωντανό ιστότοπο https://yourwebsite.com.
Το δημιούργησα γιατί σε staging περιβάλλον δεν θέλω να φορτώνω το hosting με άχρηστα GB από δεδομένα τα οποία υπάρχουν αλλού και φυσικά δεν μου αρέσει να δουλεύω χωρίς να βλέπω π.χ. φωτογραφίες ή video.
Μπορείτε να το κατεβάσετε από εδώ : https://github.com/delmoras/snippets/tree/master/fallback
Τι Κάνει
- Δέχεται την παραμέτρο
file
στο query string (π.χ.?file=assets/image.jpg
) - Ελέγχει την επέκταση του αρχείου για να αποτρέψει κακόβουλη χρήση
- Ανακατευθύνει το αίτημα στο
https://yourwebsite.com/{file path}
- Επιστρέφει το περιεχόμενο του αρχείου με το σωστό
Content-Type
header - Επιστρέφει 403 Forbidden για μη επιτρεπτές επεκτάσεις
- Επιστρέφει 404 Not Found αν το αρχείο δεν βρεθεί στον απομακρυσμένο server
Επιτρεπόμενοι Τύποι Αρχείων
jpg, jpeg, png, gif, webp, svg,
js, css,
woff, woff2, ttf, eot,
mp4, webm, ogg
Σημειώσεις Ασφαλείας
- Τα αιτήματα για απαγορευμένες επεκτάσεις (π.χ.
.php
,.txt
,.env
) απορρίπτονται για την αποτροπή κινδύνων ασφαλείας. - Αφαιρεί τα αρχικά
/
από το path για αποφυγή κακόβουλων διαδρομών.
Παράδειγμα Χρήσης
GET /proxy.php?file=images/logo.png
Αυτό θα αναζητήσει το αρχείο από:
https://yourwebsite.com/images/logo.png
και θα το επιστρέψει σαν να ήταν τοπικό.
Απαιτήσεις
- PHP με ενεργοποιημένη την επέκταση
cURL
- Web server (π.χ. Apache, Nginx)
Χρήση
Ιδανικό για περιβάλλοντα staging ή preview όπου θέλετε να σερβίρετε αρχεία παραγωγής χωρίς να τα αντιγράψετε τοπικά.
Ρύθμιση Fallback με .htaccess
Αν θέλεις το script να λειτουργεί ως εναλλακτική λύση (fallback) για ελλείποντα στατικά/πολυμεσικά αρχεία, πρόσθεσε το παρακάτω στον .htaccess
σου:
<IfModule mod_rewrite.c>
RewriteEngine On
# If file doesn't exist and is a media/static file, redirect to fallback
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\.(jpg|jpeg|png|gif|webp|svg|js|css|woff|woff2|ttf|eot|mp4|webm|ogg))$ /fallback.php?file=$1 [L]
</IfModule>
Με αυτόν τον τρόπο, όλα τα αιτήματα για μη υπάρχοντα media/static αρχεία θα προωθούνται αυτόματα στο fallback.php
.