Alex Costantino

Information Technology DevelopmentI.T. Development

🇬🇧️ 🇮🇹 EL

Το απόλυτο .htaccess για Laravel




Έφτιαξα το απόλυτο .htaccess για Laravel.

Το κορυφαίο όλων των εποχών. Ένα εκθαμβωτικό αριστούργημα ρυθμίσεων server.

Εντάξει, μπορεί να υπερβάλλω λίγο.

Αυτό που κάνει στην πραγματικότητα είναι να λύνει με απλό και πρακτικό τρόπο μερικά συνηθισμένα προβλήματα φιλοξενίας Laravel, κάτι που παραμένει αρκετά εντυπωσιακό για ένα τόσο μικρό αρχείο.

Ας δούμε πώς λειτουργεί.

Το πρόβλημα με το URL

Σε μια τυπική εγκατάσταση Laravel, η εφαρμογή εξυπηρετείται μέσω του φακέλου public/.

Ανάλογα με τη διαμόρφωση του hosting, μπορεί να καταλήξεις με ένα URL όπως αυτό:

https://www.acitd.com/public/

Αντί για την πιο καθαρή εκδοχή:

https://www.acitd.com/

Το πρώτο λειτουργεί, φυσικά, αλλά το επιπλέον public/ δεν βοηθάει ιδιαίτερα το URL να κερδίσει κάποιο βραβείο αισθητικής.

Το πρόβλημα ασφαλείας

Υπάρχει όμως και ένα πιο σημαντικό ζήτημα.

Αν ανεβάσεις ολόκληρο το Laravel project απευθείας σε έναν δημόσια προσβάσιμο φάκελο, χωρίς να ρυθμίσεις σωστά τον web server, υπάρχει πιθανότητα να γίνουν προσβάσιμα μέσω του διαδικτύου αρχεία που βρίσκονται έξω από το public/.

Και αυτό είναι κάτι που σίγουρα θέλεις να αποφύγεις.

Ιδανικά, ο κεντρικός δημόσιος φάκελος του server πρέπει να δείχνει απευθείας στο public/ του Laravel. Με αυτόν τον τρόπο, τα αρχεία ρυθμίσεων, ο κώδικας της εφαρμογής, τα dependencies και τα υπόλοιπα ευαίσθητα αρχεία παραμένουν εκτός δημόσιας πρόσβασης.

Ωστόσο, ορισμένα πακέτα shared hosting δεν σου επιτρέπουν να αλλάξεις τον δημόσιο φάκελο του server.

Κάπου εδώ μπαίνει στην ιστορία το ηρωικό μας .htaccess.

Το Laravel χρησιμοποιεί επίσης έναν ακόμη δημόσιο φάκελο:

storage/app/public/

Η διαφορά μεταξύ των δύο φακέλων είναι η εξής:

Φάκελος Χρήση
public/ Περιέχει στατικά δημόσια αρχεία, όπως assets που προστίθενται κατά την ανάπτυξη.
storage/app/public/ Περιέχει δυναμικά δημόσια αρχεία που δημιουργούνται ή ανεβαίνουν μέσω της εφαρμογής.

Η απόλυτη λύση .htaccess

Η παρακάτω διαμόρφωση κατευθύνει τα δημόσια requests στους κατάλληλους φακέλους του Laravel, ενώ διατηρεί το υπόλοιπο project εκτός δημόσιας πρόσβασης.

Με απλά λόγια, οι επισκέπτες βλέπουν τα αρχεία που χρειάζονται, και όχι ολόκληρη τη δομή της εφαρμογής σου.

Όλοι κερδίζουν.

Είναι όντως το απόλυτο .htaccess;

Αυτό θα το κρίνει η ιστορία.

Προς το παρόν, πάντως, κάνει πολύ καλά τη δουλειά του.

1. Τοποθέτησε αυτό το αρχείο .htaccess στον κεντρικό φάκελο του project /:

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^ %{REQUEST_URI}/ [R=301, L]
RewriteCond %{REQUEST_URI} !^/storage/app/public/
RewriteCond %{DOCUMENT_ROOT}/storage/app/public%{REQUEST_URI} -f
RewriteRule ^ /storage/app/public%{REQUEST_URI} [QSA, L]
RewriteCond %{REQUEST_URI} !^/(public|storage/app/public)/
RewriteRule ^ /public%{REQUEST_URI} [QSA, L]

2. Τοποθέτησε αυτό το αρχείο .htaccess μέσα στον φάκελο storage/app/public/:

storage/app/public/.htaccess

allow from all

Αυτό ήταν

Οι δημόσια προσβάσιμοι φάκελοι είναι πλέον οι εξής:

  • public/
  • storage/app/public/

Τα αρχεία τους είναι προσβάσιμα σαν να βρίσκονται απευθείας στον κεντρικό φάκελο /, ενώ το υπόλοιπο Laravel project παραμένει κρυφό.

Και ως μικρό bonus, το κάπως άβολο public/ εξαφανίζεται από το URL.

Πολύ καλύτερα.

Το απόλυτο .htaccess ολοκλήρωσε την αποστολή του.

Μια τελευταία σημείωση

Κατά τη δοκιμή της διαμόρφωσης, καθάρισε τις σχετικές caches του browser, του proxy, του CDN ή του server. Διαφορετικά, παλαιότερα αποθηκευμένα responses μπορεί να δημιουργήσουν την εντύπωση ότι οι νέοι κανόνες του .htaccess δεν έχουν εφαρμοστεί.

Επιβεβαίωσε επίσης ότι τα ευαίσθητα αρχεία δεν είναι άμεσα προσβάσιμα μετά την ενεργοποίηση της διαμόρφωσης.

Η εμπιστοσύνη είναι καλή. Η δοκιμή είναι καλύτερη.