Προεπιλεγμένο αρχείο .htaccess WordPress: κώδικας, επαναφορά
Ο ακριβής κώδικας .htaccess που γράφει το WordPress για τους μόνιμους συνδέσμους, τι κάνει κάθε γραμμή και πώς τον επαναφέρετε όταν τα άρθρα δίνουν 404.
Το προεπιλεγμένο αρχείο .htaccess του WordPress είναι το μικρό block RewriteEngine που γράφει το λογισμικό στο .htaccess στη ρίζα του ιστότοπού σας, ώστε μόνιμοι σύνδεσμοι όπως /2026/10/post-name/ να λειτουργούν αντί να επιστρέφουν 404. Μοιάζει έτσι:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Αυτοί οι κανόνες προέρχονται από τον κώδικα που χρησιμοποιεί το WordPress για να δημιουργήσει το block και ταιριάζουν με τον οδηγό .htaccess του ίδιου του WordPress. Το WordPress γράφει επίσης τρεις γραμμές σχολίων αμέσως μετά το # BEGIN WordPress, που προειδοποιούν ότι οι αλλαγές ανάμεσα στους δείκτες θα αντικατασταθούν. Δεν αλλάζουν τον τρόπο λειτουργίας των κανόνων.
Σε εγκατάσταση σε υποφάκελο, το WordPress βάζει τη διαδρομή του υποφακέλου τόσο στο RewriteBase όσο και στον τελευταίο κανόνα, για παράδειγμα RewriteBase /blog/ και RewriteRule . /blog/index.php [L]. Τα δίκτυα multisite χρησιμοποιούν διαφορετικό block, και το WordPress δεν γράφει αυτόματα αυτό το αρχείο για αυτά.
Τα βασικά
- Το WordPress δημιουργεί αυτό το block σε Apache και LiteSpeed όταν έχει δικαίωμα εγγραφής και οι φιλικοί μόνιμοι σύνδεσμοι είναι ενεργοί. Αρκεί να ανοίξετε τις Ρυθμίσεις > Μόνιμοι σύνδεσμοι.
- Αν το αρχείο λείπει ή έχει καταστραφεί, οι μόνιμοι σύνδεσμοι δίνουν 404 ενώ η αρχική σελίδα φορτώνει, επειδή δεν χρειάζεται τους κανόνες rewrite.
- Ό,τι προσθέτετε εσείς ή ένα plugin μπαίνει πάνω από το
# BEGIN WordPress, ποτέ ανάμεσα στους δείκτες. Το WordPress αντικαθιστά όλο το περιεχόμενο ανάμεσά τους όταν ενημερώνει το αρχείο.

index.php μίας γραμμής.Τι κάνει κάθε γραμμή
Το RewriteEngine On ενεργοποιεί το module mod_rewrite του Apache για αυτόν τον κατάλογο· χωρίς αυτό, οι κανόνες rewrite από κάτω δεν κάνουν τίποτα.
Το RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] αφήνει το URL ως έχει (αυτό σημαίνει το -) και αντιγράφει την κεφαλίδα Authorization του αιτήματος σε μια μεταβλητή του server. Το WordPress διαβάζει αυτή τη μεταβλητή για να πάρει ένα όνομα χρήστη και έναν κωδικό που στάλθηκαν στην κεφαλίδα, όπως έναν κωδικό εφαρμογής.
Το RewriteBase / ορίζει το πρόθεμα διαδρομής που χρησιμοποιεί ο Apache για τα URL που ξαναγράφονται. Το WordPress το ορίζει ανάλογα με το πού βρίσκεται ο ιστότοπος, οπότε μια εγκατάσταση σε υποφάκελο παίρνει RewriteBase /blog/.
Το RewriteRule ^index\.php$ - [L] είναι προστατευτικός κανόνας: αν το αίτημα είναι ήδη index.php, το rewrite σταματά και το αίτημα περνά αναλλοίωτο.
Οι δύο γραμμές RewriteCond είναι η πραγματική λογική. Τα %{REQUEST_FILENAME} !-f και !-d ρωτούν: “Αυτό το αίτημα ΔΕΝ ταιριάζει με πραγματικό αρχείο και ΔΕΝ ταιριάζει με πραγματικό κατάλογο;” Και τα δύο πρέπει να ισχύουν για να ενεργοποιηθεί ο τελικός κανόνας. Έτσι μια πραγματική εικόνα, ένα αρχείο CSS ή ένα ανεβασμένο PDF σερβίρεται απευθείας και δεν περνά ποτέ από τη δρομολόγηση του WordPress.
Το RewriteRule . /index.php [L] είναι αυτό που κάνει τους μόνιμους συνδέσμους να λειτουργούν. Ό,τι περάσει αυτές τις δύο συνθήκες στέλνεται στο index.php, και το WordPress αποφασίζει σε ποιο άρθρο, σελίδα ή αρχείο αναφέρεται το URL.
Πότε το WordPress αναδημιουργεί αυτό το αρχείο και πότε όχι
Το WordPress ανανεώνει τους κανόνες rewrite κάθε φορά που φορτώνει η οθόνη Ρυθμίσεις > Μόνιμοι σύνδεσμοι, οπότε αρκεί να την ανοίξετε και δεν χρειάζεται να κάνετε κλικ στο Αποθήκευση αλλαγών. Αν το .htaccess λείπει, το WordPress το δημιουργεί εφόσον ο φάκελος είναι εγγράψιμος και οι φιλικοί μόνιμοι σύνδεσμοι είναι ενεργοί. Αν το αρχείο υπάρχει και είναι εγγράψιμο, το WordPress αντικαθιστά το block ανάμεσα στους δείκτες.
Αυτό δεν λύνει το πρόβλημα στις εξής περιπτώσεις:
- Το αρχείο ή ο φάκελός του δεν είναι εγγράψιμος για τον χρήστη με τον οποίο εκτελείται η PHP. Η οθόνη δείχνει σφάλμα ότι το αρχείο
.htaccessδεν είναι εγγράψιμο, μαζί με τους κανόνες προς επικόλληση. Σε ορισμένους παρόχους η PHP εκτελείται με διαφορετικό χρήστη συστήματος από αυτόν που κατέχει τα αρχεία που ανεβάζετε με FTP, οπότε δικαιώματα που φαίνονται σωστά σε ένα πρόγραμμα FTP μπορεί να μπλοκάρουν το WordPress. - Χρησιμοποιείτε nginx. Ο οδηγός nginx του WordPress λέει ότι ο nginx δεν έχει αρχείο ρυθμίσεων ανά κατάλογο όπως το
.htaccessκαι ότι το WordPress δεν μπορεί να αλλάξει τις ρυθμίσεις του server. Η αντίστοιχη δρομολόγηση είναι μια οδηγίαtry_filesστις ρυθμίσεις του server, την οποία πρέπει να επεξεργαστεί ένας διαχειριστής. - Το
AllowOverrideέχει τιμήNoneγια τον κατάλογο του ιστότοπού σας στις κύριες ρυθμίσεις του Apache. Η τεκμηρίωση του Apache λέει: “This means .htaccess files are completely ignored unless you explicitly enable them for a directory.” Δηλαδή, τα αρχεία.htaccessαγνοούνται εντελώς, εκτός αν τα ενεργοποιήσετε ρητά για έναν κατάλογο. Το WordPress μπορεί να γράψει ένα τέλειο αρχείο και αυτό πάλι δεν θα κάνει τίποτα. Οι κανόνες rewrite χρειάζονταιAllowOverride FileInfo(ήAll), κάτι που ίσως πρέπει να αλλάξει ο πάροχός σας. - Οι μόνιμοι σύνδεσμοί σας είναι ρυθμισμένοι σε Απλό (Plain). Τα απλά URL δεν χρειάζονται κανόνες rewrite, οπότε το WordPress δεν δημιουργεί το αρχείο για αυτά.
Πώς το επαναφέρετε με το χέρι
Αν τα άρθρα και οι σελίδες δίνουν 404 ενώ η αρχική σελίδα λειτουργεί, ελέγξτε πρώτα αν το .htaccess λείπει ή έχει χαλάσει. Διορθώστε το σε δύο βήματα.
1. Δοκιμάστε πρώτα τη λύση με ένα κλικ. Ανοίξτε τις Ρυθμίσεις > Μόνιμοι σύνδεσμοι στο wp-admin και κάντε κλικ στο Αποθήκευση αλλαγών χωρίς να αλλάξετε τίποτα. Αν το WordPress μπορεί να γράψει το αρχείο, αυτό το αναδημιουργεί. Αν δεν μπορεί, η οθόνη δείχνει το σφάλμα και τους κανόνες που χρειάζεστε.
2. Αν αυτό δεν βοηθήσει, δημιουργήστε το αρχείο με το χέρι. Συνδεθείτε μέσω FTP/SFTP ή του διαχειριστή αρχείων του παρόχου σας και μεταβείτε στον ριζικό φάκελο του ιστότοπού σας, που συνήθως είναι αυτός που περιέχει το wp-admin. Ελέγξτε αν υπάρχει το .htaccess. Το όνομά του αρχίζει με τελεία, οπότε ορισμένοι διαχειριστές αρχείων το κρύβουν από προεπιλογή· ενεργοποιήστε “εμφάνιση κρυφών αρχείων”.
- Αν λείπει, δημιουργήστε ένα νέο αρχείο με όνομα ακριβώς
.htaccess(χωρίς.txt, τίποτα πριν από την τελεία). - Επικολλήστε τους κανόνες που σας έδειξε το WordPress ή το προεπιλεγμένο block από την αρχή αυτού του οδηγού. Σε εγκατάσταση σε υποφάκελο, προσαρμόστε το
RewriteBaseκαι τον τελευταίο κανόνα. - Αποθηκεύστε και ξαναφορτώστε τον μόνιμο σύνδεσμο ενός άρθρου για να επιβεβαιώσετε ότι λειτουργεί.
Αν εξακολουθεί να δίνει 404, το .htaccess μπορεί να αγνοείται. Ρωτήστε τον πάροχό σας για το AllowOverride, καθώς ο Apache αγνοεί ακόμη και ένα σωστό αρχείο όταν αυτό είναι απενεργοποιημένο.
Οι δικοί σας κανόνες και το block του WordPress
Ένα plugin ή μια χειροκίνητη επεξεργασία μπορεί να προσθέσει δικούς του κανόνες, όπως ανακατευθύνσεις, προστασία από hotlinking ή κεφαλίδες cache. Κρατήστε τους έξω από το block του WordPress, και πάνω από αυτό ώστε να εκτελούνται πριν από τον γενικό κανόνα του:
# Κανόνες που προσθέσατε εσείς ή ένα plugin: ΠΑΝΩ από τους δείκτες WordPress
<FilesMatch "\.(jpg|jpeg|png|gif)$">
# παράδειγμα: προστασία από hotlinking, κανόνες cache κ.λπ.
</FilesMatch>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Ό,τι τοποθετείται ανάμεσα σε # BEGIN WordPress και # END WordPress χάνεται την επόμενη φορά που το WordPress θα ενημερώσει το αρχείο, και αρκεί να φορτώσει η οθόνη μόνιμων συνδέσμων για να συμβεί αυτό. Οι γραμμές πριν και μετά τους δείκτες διατηρούνται. Ειδικά για τις ανακατευθύνσεις, δείτε το Κανόνες ανακατεύθυνσης .htaccess για WordPress σωστά γραμμένοι για το πού ανήκουν και πώς αποφεύγετε τους βρόχους.
Ένα 500 Internal Server Error αμέσως μετά την επεξεργασία του αρχείου δείχνει σε αυτό που μόλις αλλάξατε. Η τεκμηρίωση του Apache λέει ότι το αρχείο καταγραφής σφαλμάτων πιθανότατα θα αναφέρει μια οδηγία που δεν επιτρέπεται ή ένα συντακτικό σφάλμα. Κανόνες αντιγραμμένοι από παλιό tutorial μπορούν να το προκαλέσουν: το Order είναι μη έγκυρη εντολή στον Apache 2.4, εκτός αν έχει φορτωθεί το mod_access_compat. Αναιρέστε την αλλαγή για να επανέλθει ο ιστότοπος και μετά διαβάστε το αρχείο καταγραφής σφαλμάτων.
Πέρα από το προεπιλεγμένο block
Το προεπιλεγμένο block καλύπτει μόνο τη δρομολόγηση των μόνιμων συνδέσμων και την κεφαλίδα Authorization. Για να περιορίσετε την πρόσβαση σε ευαίσθητα αρχεία, όπως να μπλοκάρετε την εκτέλεση PHP στο /uploads ή να απορρίπτετε άμεσα αιτήματα προς το wp-config.php, δείτε τους κανόνες ασφαλείας .htaccess για WordPress που βοηθούν πραγματικά. Αν οι μόνιμοι σύνδεσμοι δίνουν 404 για άλλο λόγο, όπως λάθος δομή συνδέσμων, ένα επίπεδο cache που σερβίρει παλιούς κανόνες ή μια σύγκρουση υποκαταλόγων σε multisite, το Οι μόνιμοι σύνδεσμοι του WordPress δεν λειτουργούν εξετάζει τις άλλες αιτίες.
Συχνές ερωτήσεις
Τι είναι το προεπιλεγμένο αρχείο .htaccess του WordPress;
Είναι το block RewriteEngine που γράφει το WordPress ανάμεσα σε # BEGIN WordPress και # END WordPress στο .htaccess στη ρίζα του ιστότοπού σας. Περνά την κεφαλίδα Authorization στην PHP και στέλνει στο index.php κάθε αίτημα που δεν είναι πραγματικό αρχείο ή φάκελος.
Ποιος είναι ο ακριβής προεπιλεγμένος κώδικας .htaccess του WordPress;
RewriteEngine On, ένας κανόνας που περνά την κεφαλίδα Authorization στην PHP, RewriteBase /, ένας κανόνας διέλευσης για το index.php, δύο συνθήκες που ελέγχουν ότι το αίτημα δεν είναι πραγματικό αρχείο ή φάκελος, και ένας τελικός κανόνας που στέλνει όλα τα υπόλοιπα στο index.php. Το πλήρες block βρίσκεται στην αρχή αυτού του οδηγού.
Γιατί όλα τα άρθρα μου δίνουν 404 εκτός από την αρχική σελίδα;
Ένα αρχείο .htaccess που λείπει ή έχει καταστραφεί στον Apache δημιουργεί αυτό το μοτίβο. Ο server μπορεί να βρει την αρχική σελίδα χωρίς κανόνες rewrite. Κάθε άλλος μόνιμος σύνδεσμος χρειάζεται αυτούς τους κανόνες για να φτάσει στο index.php, οπότε χωρίς αυτούς ο Apache ψάχνει ένα αρχείο που δεν υπάρχει και επιστρέφει 404.
Αναδημιουργεί αυτόματα το WordPress το .htaccess;
Ναι, σε Apache ή LiteSpeed με mod_rewrite, αν οι φιλικοί μόνιμοι σύνδεσμοι είναι ενεργοί και το WordPress μπορεί να γράψει εκεί. Αρκεί να ανοίξετε τις Ρυθμίσεις > Μόνιμοι σύνδεσμοι. Αν το αρχείο λείπει, ο φάκελος πρέπει να είναι εγγράψιμος, ενώ ένα υπάρχον αρχείο πρέπει να είναι το ίδιο εγγράψιμο. Διαφορετικά, η οθόνη δείχνει σφάλμα, μαζί με τους κανόνες που πρέπει να επικολλήσετε με το χέρι.
Γιατί ο nginx δεν έχει αρχείο .htaccess του WordPress;
Ο nginx δεν έχει αρχείο ρυθμίσεων ανά κατάλογο όπως το .htaccess του Apache. Η ίδια δρομολόγηση γράφεται ως κανόνας try_files στις ρυθμίσεις του server nginx, τις οποίες πρέπει να επεξεργαστεί ένας διαχειριστής επειδή το WordPress δεν μπορεί να τις αλλάξει.
Γιατί χάλασε το .htaccess μου αφού αποθήκευσα τους μόνιμους συνδέσμους;
Ελέγξτε αν ένας δικός σας κανόνας μπήκε ανάμεσα στους δείκτες # BEGIN WordPress και # END WordPress. Το WordPress αντικαθιστά όλο το περιεχόμενο ανάμεσά τους όταν ενημερώνει το αρχείο, οπότε αυτός ο κανόνας χάνεται. Κρατήστε τους δικούς σας κανόνες πάνω από τους δείκτες.
Πηγές
- WordPress Advanced Administration: .htaccess
- WordPress Advanced Administration: Nginx
- Πηγαίος κώδικας WordPress: class-wp-rewrite.php, options-permalink.php, misc.php, load.php, user.php, vars.php
- Apache HTTP Server 2.4: .htaccess files, mod_rewrite, Upgrading to 2.4
Φτιάξτε ένα καθαρό, σωστό .htaccess, με το προεπιλεγμένο block μόνιμων συνδέσμων και όσους κανόνες ασφαλείας ή ανακατεύθυνσης χρειάζεστε πραγματικά, με τη δωρεάν γεννήτρια .htaccess για WordPress.
FAQ
Ερωτήσεις
Τι είναι το προεπιλεγμένο αρχείο .htaccess του WordPress;
Είναι το block RewriteEngine που γράφει το WordPress ανάμεσα σε # BEGIN WordPress και # END WordPress στο .htaccess στη ρίζα του ιστότοπού σας. Περνά την κεφαλίδα Authorization στην PHP και στέλνει στο index.php κάθε αίτημα που δεν είναι πραγματικό αρχείο ή φάκελος.
Ποιος είναι ο ακριβής προεπιλεγμένος κώδικας .htaccess του WordPress;
RewriteEngine On, ένας κανόνας που περνά την κεφαλίδα Authorization στην PHP, RewriteBase /, ένας κανόνας διέλευσης για το index.php, δύο συνθήκες που ελέγχουν ότι το αίτημα δεν είναι πραγματικό αρχείο ή φάκελος, και ένας τελικός κανόνας που στέλνει όλα τα υπόλοιπα στο index.php. Το πλήρες block βρίσκεται στην αρχή αυτού του οδηγού.
Γιατί όλα τα άρθρα μου δίνουν 404 εκτός από την αρχική σελίδα;
Ένα αρχείο .htaccess που λείπει ή έχει καταστραφεί στον Apache δημιουργεί αυτό το μοτίβο. Ο server μπορεί να βρει την αρχική σελίδα χωρίς κανόνες rewrite. Κάθε άλλος μόνιμος σύνδεσμος χρειάζεται αυτούς τους κανόνες για να φτάσει στο index.php, οπότε χωρίς αυτούς ο Apache ψάχνει ένα αρχείο που δεν υπάρχει και επιστρέφει 404.
Αναδημιουργεί αυτόματα το WordPress το .htaccess;
Ναι, σε Apache ή LiteSpeed με mod_rewrite, αν οι φιλικοί μόνιμοι σύνδεσμοι είναι ενεργοί και το WordPress μπορεί να γράψει εκεί. Αρκεί να ανοίξετε τις Ρυθμίσεις > Μόνιμοι σύνδεσμοι. Αν το αρχείο λείπει, ο φάκελος πρέπει να είναι εγγράψιμος, ενώ ένα υπάρχον αρχείο πρέπει να είναι το ίδιο εγγράψιμο. Διαφορετικά, η οθόνη δείχνει σφάλμα, μαζί με τους κανόνες που πρέπει να επικολλήσετε με το χέρι.
Γιατί ο nginx δεν έχει αρχείο .htaccess του WordPress;
Ο nginx δεν έχει αρχείο ρυθμίσεων ανά κατάλογο όπως το .htaccess του Apache. Η ίδια δρομολόγηση γράφεται ως κανόνας try_files στις ρυθμίσεις του server nginx, τις οποίες πρέπει να επεξεργαστεί ένας διαχειριστής επειδή το WordPress δεν μπορεί να τις αλλάξει.
Γιατί χάλασε το .htaccess μου αφού αποθήκευσα τους μόνιμους συνδέσμους;
Ελέγξτε αν ένας δικός σας κανόνας μπήκε ανάμεσα στους δείκτες # BEGIN WordPress και # END WordPress. Το WordPress αντικαθιστά όλο το περιεχόμενο ανάμεσά τους όταν ενημερώνει το αρχείο, οπότε αυτός ο κανόνας χάνεται. Κρατήστε τους δικούς σας κανόνες πάνω από τους δείκτες.