Μερικοί τρόποι για αποσφαλμάτωση του mod_rewrite

Μερικοί τρόποι για αποσφαλμάτωση του mod_rewrite

Όλοι γνωρίζουμε πόσο χρήσιμο εργαλείο είναι η επέκταση mod_rewrite για τον Apache και το SEO της σελίδας μας. Σε αυτό το άρθρο σήμερα θα σας παρουσιάσω μερικές χρήσιμες εντολές που εντόπισα σήμερα που θα σας φανούν χρήσιμες στην αποσφαλμάτωση του mod_rewrite.

Πολλοί διαχειριστές ιστοσελίδων, αργά ή γρήγορα χρησιμοποιούν την επέκταση mod_rewrite και ο καθένας τους μέχρι τελικά να ολοκληρώσει την παραμετροποίηση του θα αντιμετωπίσει κάποιο πρόβλημα με αυτή την επέκταση. Αφού αντιμετωπίσουν το πρώτο τους πρόβλημα θα ανατρέξουν στην τεκμηρίωση του RewriteLog και του RewriteLogLevel. Το επόμενο όμως πρόβλημα που έρχεται είναι πως τις δυο αυτές εντολές δεν μπορεί ένας χρηστής να της χρησιμοποιήσει σε ένα shared hosting γιατί δεν μπορούν να δηλωθούν μέσα στο htaccess.

Ο λόγος που δεν μπορείτε να χρησιμοποιήσετε της παραπάνω εντολές είναι ο ίδιο ο Apache web server και ο σχεδιασμός του, όπου για διάφορους λόγους (συμπεριλαμβανομένης και της ασφάλειας) δεν σας επιτρέπει να χρησιμοποιήσετε άμεσα μέσα στο htaccess αρχείο σας τις εντολές RewriteLog και RewriteLogLevel. Για να μπορέσετε να χρησιμοποιήσετε αυτές τις εντολές θα πρέπει να έχετε πρόσβαση στο αρχείο httpd.conf, όπου εκεί βρίσκονται οι γενικές ρυθμίσεις του Apache και να της χρησιμοποιήσετε όπως στο παράδειγμα που ακολουθεί

<IfModule mod_rewrite.c>
    RewriteLog "/home/servername/www/logs/rewrite.log"
    RewriteLogLevel 3
</IfModule>

Αφού περάσετε αυτές τις εντολές στο httpd.conf το επόμενο βήμα είναι να κάνετε επανεκκίνηση του Apache και από εδώ και πέρα για κάθε σελίδα που θα παρέχει ο Apache με τη η χρήση του mod_rewrite θα καταγράφει όλα τα στοιχεία της αλλαγής του domain στο αρχείο rewrite.log. Αυτό όπως καταλαβαίνετε μπορεί να είναι μεγάλο πρόβλημα για servers που έχουν πολύ κίνηση, γιατί κάθε απάντηση του Apache δημιουργεί κατά μέσο όρο 5 γραμμές ανάλυσης στο rewrite.log. Οπότε όπως καταλαβαίνετε, ένας web server με 100 επισκέψεις το λεπτό δημιουργεί τουλάχιστον 500 γραμμές μέσα στο rewrite.log μόνο μέσα σε ένα λεπτό.

[BOX type=’notice’] Αν χρησιμοποιήσετε αυτές της εντολές, μετά την αποσφαλμάτωση να θυμηθείτε να τις διαγράψετε ή να τις μετατρέψετε σε σχόλιο. [/BOX]

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

Ο τρόπος αποσφαλμάτωσης του mod_rewrite που θα σας παρουσιάσω εδώ έχει δημιουργηθεί από τον jdMorgan και τον χρησιμοποίησα κάποια στιγμή σε ένα web site που δημιούργησα με WordPress.

Αυτό που κάνει η μέθοδος αυτή είναι να επιστρέφει μέσω των headers κάποιες από τις πληροφορίες που ελέγχει η επέκταση mod_rewrite κατά την ανάλυση των δεδομένων. Στη συνέχεια με τη βοήθεια της κονσόλας του web browser σας μπορείτε να δείτε ποιες είναι αυτές οι τιμές.

Μέσα στο αρχείο .htaccess της ιστοσελίδας σας χρησιμοποιήστε της παρακάτω εντολές:

RewrtieCond %{QUERY_STRING} !varname
RewriteRule (.*) http://www.mysite.com/$1?varname&therequest=%{THE_REQUEST} [R=301,L,QSA]

Το R=301 πραγματοποιεί μία ανακατεύθυνση με κωδικό HTTP 301 αντί για ένα rewrite και αυτό είναι το ζητούμενο. Η ανακατεύθυνση αυτή στέλνει δεδομένα πίσω στον browser σας αλλά η ανακατεύθυνση γίνετε μόνο μέσα στον Server.

Το QSA διατηρεί το ερώτημα αναζήτησης (ότι είναι μετά το ? στο URL).

Το L λέει στο mod_rewrite να σταματήσει την επεξεργασία σε αυτή τη γραμμή.

Η εντολή RewriteCond απλά ελέγχει αν υπάρχει η μεταβλητή varname για να μας αποτρέψει από ατέρμονη ανακατεύθυνση.

Για να λειτουργήσει σε εσάς το παραπάνω παράδειγμα θα πρέπει να το μεταβάλλετε λίγο τον κώδικα για να ταιριάξει στις δικές σας ανάγκες.