Μπορεί να χρειαστεί κάποια στιγμή να κάνετε 301 redirects σε αρχείο htaccess αλλά με URL που περιλαμβάνουν ελληνικούς χαρακτήρες. Εκεί λοιπόν θα ανακαλύψετε ότι τα πράγματα δεν είναι και τόσο εύκολα..
Θα έχετε φυσικά παρατηρηρήσει ότι τα url με ελληνικούς χαρακτήρες αν τα κάνετε copy-paste αλλάζουν απο πχ
https://www.elementia.gr/τεστ/
σε
https://www.elementia.gr/%CF%84%CE%B5%CF%83%CF%84/
Aς υποθέσουμε λοιπόν ότι θέλω να κάνω redirect 301 (δηλαδή μόνιμη ανακατεύθυνση) την παραπάνω σελίδα σε ένα άλλο domain με πάλι ελληνικούς χαρακτήρες στο URL της, για παράδειγμα στο http://www.somedomain.gr/δοκιμαστική-σελίδα/ το οποίο γίνεται encoded σε http://www.somedomain.gr/%CE%B4%CE%BF%CE%BA%CE%B9%CE%BC%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CE%AE-%CF%83%CE%B5%CE%BB%CE%AF%CE%B4%CE%B1/
Oι παρακάτω γραμμές στο htaccess δεν δουλεύουν
RewriteEngine On
RewriteRule ^/τεστ/?$ “http://www.somedomain.gr/δοκιμαστική-σελίδα/” [R=301,L]
όπως ούτε και οι αντίστοιχες με τα encoded urls
RewriteRule ^/%CF%84%CE%B5%CF%83%CF%84/?$ “http://www.somedomain.gr/%CE%B4%CE%BF%CE%BA%CE%B9%CE%BC%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CE%AE-%CF%83%CE%B5%CE%BB%CE%AF%CE%B4%CE%B1/” [R=301,L]
Η λύση είναι
1. να κάνουμε escape το σύμβολο % στο αρχικό url string οπότε όπου % αλλάζουμε με \x
2. να δηλώσουμε το flag NE έτσι ώστε στο target url να μην γίνεται escape το output
Οπότε η εντολή μας γίνεται
RewriteRule ^\xCF\x84\xCE\xB5\xCF\x83\xCF\x84/?$ “http://www.somedomain.gr/%CE%B4%CE%BF%CE%BA%CE%B9%CE%BC%CE%B1%CF%83%CF%84%CE%B9%CE%BA%CE%AE-%CF%83%CE%B5%CE%BB%CE%AF%CE%B4%CE%B1/” [R=301,L,NE]
και happy redirecting τα ελληνικά urls σας 🙂