Mod_rewrite για τον apache
Τι είναι όμως το mod_rewrite?
Πρόκειται για μία λειτουργική μονάδα/ένθεμα (module) του apache (προφέρεται απά – τσε )για χειρισμό ζητούμενων υπερσυνδέσμων σε επίπεδο διαμοιραστή (server-side).
Τα εισερχόμενα URLS φιλτράρονται μέσω διαφόρων κανόνων και όταν γίνει η σύγκριση σε επίπεδο server, τότε αντικαθίσταται ο χαρακτήρας του URL με τον επιθυμητό. Παρακάτω θα δούμε πιο αναλυτικά και με παραδείγματα πως λειτουργεί.
Πλεονεκτήματα του mod_rewrite
Συνηθέστερα, χρησιμοποιείται για να μετατρέψει δύσχρηστα και ακατανόητα URLS σε πιο ευανάγνωστα και κατανοητά. Σαν άμεσο αποτέλεσμα, τα URLS αυτά είναι περισσότερο φιλικά προς τις μηχανές αναζήτησης.
Ένα παράδειγμα:
- Όχι τόσο φιλικό URL: http://example.gr/user.php?id=5476
- Πιο φιλικό: http://example.gr/user/5476/
- Ακόμα καλύτερα: http://example.gr/user/george/
Το τελευταίο βελτιωμένο URL δεν είναι μόνο πιο κατανοητό στον απλό χρήστη αλλά έχει και σημασιολογική έννοια. Είδαμε λοιπόν μία βασική χρησιμότητα του mod_rewrite. Όπως θα δούμε παρακάτω, μπορούμε να επιτύχουμε ακόμα πιο σύνθετα αποτελέσματα με την χρήση κατάλληλων παραμέτρων.
Επεκτείνοντας το παραπάνω παράδειγμα, πρέπει να επισημάνουμε πως ο μετασχηματισμός φιλικών URLs μέσω του mod_rewrite συμβάλλει στην ασφάλεια του ιστότοπου μας. Όπως βλέπουμε, θεωρητικά, ένας κακόβουλος χρήστης μπορεί να περάσει την παράμετρο XY στο id, αποσκοπώντας λανθασμένη λειτουργία του scipt μας.
http://example.gr/user.php?id=ΧΥ
ενώ αντίστοιχα με την χρήση του mod_rewrite δεν θα μπορούσε να αλλάξει καρφωτά την τιμή του id.
http://example.com/user/ΧΥ/
Ενεργοποιώντας το mod_rewrite στον Server
Η ενεργοποίηση του mod_rewrite ή οποιουδήποτε module του apache πρέπει να γινει από το αρχείο καθολικών μεταβλητών httpd.conf (global configuration file)
Οι περισσότεροι hosting providers έχουν ενεργοποιημένη την υπηρεσία. Παρακάτω θα δούμε πως ελέγχουμε αν όντως είναι. Στην περίπτωση που είστε ιδιοκτήτες server, τότε θα πρέπει να ανοίξετε το αρχείο httpd.conf και να αφαιρέσετε το σχόλιο που συμβολίζεται με την δίεση (#) στην εξής γραμμή:
LoadModule rewrite_module modules/mod\_rewrite.so
Παλαιότερες εκδόσεις του Apache 1.3 ίσως χρειαστεί να προσθέσετε την παρακάτω γραμμή αμέσως μετά:
# Only in Apache 1.3 AddModule mod\_rewrite.c
Στην μεταγενέστερη έκδοση 2.0 και μετά δεν είναι απαραίτητο. Μετά τις αλλαγές αυτές, απαιτείται επανεκκίνηση της υπηρεσίας.
Ας δοκιμάσουμε το mod_rewrite
Ο απλούστερος τρόπος να δοκιμάσουμε αν είναι ενεργοποιημένο είναι μέσω της παρακάτω php εντολής.
<?php phpinfo(); ?>
Στην περιοχή των ενθεμάτων που τρέχουν (Loaded_modules) πρέπει να εμφανίζεται το mod_rewrite.
Παραδείγματα χρήσης του mod_rewrite
Νο1)
Το URL σας είναι της μορφής
http://www.example.com/index.php?cat=category&subcat=subcategory
Και εσείς θέλετε να γίνει ως εξής
http://www.example.com/category/subcategory
Η λύση είναι φυσικά με τη χρήση του mod_rewrite προσθέτοντας τον παρακάτω κώδικα στο αρχείο .htaccess
RewriteEngine on RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?cat=$1&subcat=$2 [L]
Νο2)
Το URL σας είναι της μορφής
http://example.com/index.php?page=hello
και θέλετε να γίνει της μορφής
http://example.com/hello.htm
Προσθέστε τον παρακάτω κώδικα στο αρχείο .htaccess
RewriteEngine on RewriteRule ^([^/\.]+).htm$ index.php?page=$1 [L]
Για περισσότερες πληροφορίες διαβάστε στην ιστοσελίδα του apache: http://httpd.apache.org/docs/current/mod/mod_rewrite.html





Γίνετε επεξεργασία, Παρακαλώ περιμένετε...










Κανενα σχολιο