Back to Question Center
0

Σφάλμα Semalt: .htaccess αποτυγχάνει όταν συμπεριλαμβάνει $ στο τέλος

1 answers:

Η βασική κατάσταση

Έχουμε ένα διακομιστή. Έχει μερικά στατικά αρχεία, κάποια απλά, "επίπεδη" . php και . html σελίδες, αλλά έχει επίσης μια εγκατάσταση του WordPress στη ρίζα του εγγράφου, που σημαίνει ότι η επίσκεψη / μεταφέρει τον χρήστη στην τοποθεσία WordPress.

Τα στατικά αρχεία βρίσκονται στο / lp / - usar hosting para dos dominios. Ωστόσο, πρόσφατα είχα την εντολή να ξαναγράψω το ευρετήριο αυτού του φακέλου ως σελίδα WordPress, έτσι ώστε η διεύθυνσή του να διατηρείται όταν έχει πρόσβαση μέσω του WordPress. Το WordPress αυτόματα προσθέτει τις ακόλουθες γραμμές στο . htaccess ώστε να χειρίζεται οποιεσδήποτε διευθύνσεις URL που δεν ταιριάζουν με τα υπάρχοντα αρχεία ή φακέλους:

     # BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^ index \. php $ - [L]
RewriteCond% {REQUEST_FILENAME}! -f
RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule. /δείκτης. php [L]
# END WordPress    

Το πρόβλημα στο χέρι

Η σελίδα WordPress στο / lp / είναι γραμμένη και δημοσιευμένη και εγκατεστημένη με τον σωστό σύνδεσμο, αλλά τώρα πρέπει να είναι προσβάσιμη μέσω του WordPress αντί για ένα επίπεδο αρχείο. Θα ήταν ωραίο και dandy για μένα να διαγράψω απλά το περιεχόμενο στο / lp / , αλλά μερικά από αυτά πρέπει να διατηρηθούν, ιδανικά με τους υπάρχοντες συνδέσμους άθικτες εκτός από τους πολύ συγκεκριμένους / lp / URL. Έτσι, δημιούργησα το δικό μου τμήμα πάνω από το τμήμα WordPress:

     
RewriteEngine On
RewriteBase /
RewriteRule ^ lp /? $ / Index. php [L]
    

Το πρόβλημα είναι με αυτή την έκφραση εδώ:

     ^ /    

Αυτό δεν φαίνεται να λειτουργεί. Μου δίνει την παλιά σελίδα. Αυτό όμως λειτουργεί:

     ^ lp /    

Το ζήτημα με αυτήν την ενημέρωση κώδικα είναι ότι η χρήση του ανακατευθύνει οποιαδήποτε διεύθυνση URL ξεκινά με lp / , συμπεριλαμβανομένων εκείνων που διαφορετικά θα μπορούσαν να επιστρέψουν επίπεδο ή στατικό περιεχόμενο.

Η ερώτησή μου

Φαντάζομαι ότι υπάρχει κάτι για τον τρόπο με τον οποίο WordPress ή mod_rewrite λειτουργεί ότι μου λείπει αλλά τι ακριβώς είναι;

Νιώστε ελεύθεροι να μου ενημερώσετε εάν υπάρχουν πρόσθετες πληροφορίες που θα πρέπει να συμπεριλάβω.

February 7, 2018

RewriteRule ^ lp /? $ / Index. php [L]

Αυτό δεν αντιστοιχεί επειδή η πραγματική διεύθυνση URL σας είναι πιθανώς / lp / index. php (ή οποιοσδήποτε σας DirectoryIndex ), όχι απλά / lp / . (Αυτό συμβαίνει αφού η Apache έχει εσωτερικά χαρτογραφήσει τη διεύθυνση URL σε μια διαδρομή του συστήματος αρχείων). Επομένως, δοκιμάστε να αλλάξετε το σχέδιο RewriteRule :

  RewriteRule ^ lp / ευρετήριο \. php $ / index. php [L] 

Συγκεκριμένα, υπάρχει σύγκρουση με το mod_dir. Είναι συνηθισμένο να αντιμετωπίζετε αυτά τα είδη προβλημάτων όταν προσπαθείτε να ξαναγράψετε διευθύνσεις URL που υπάρχουν επίσης ως φυσικός κατάλογος στο σύστημα αρχείων.

Όταν το αίτημα χάρτες σε έναν φυσικό κατάλογο, mod_dir κάνει μερικά πράγματα πρίν mod_rewrite ρίχνει μια ματιά σε.

  1. Εάν το αίτημα λείπει από μια τελική κάθετο, τότε το mod_dir προσαρτά την κάθετο και εξωτερικά ανακατευθύνσεις . (Αυτό εξαρτάται από το DirectorySlash είναι Στις - η προεπιλογή. )

  2. Θα επανεξετάσει εσωτερικά το αίτημα να συμπεριληφθεί το DirectoryIndex (εάν υπάρχει).


Στην άκρη

  • Δεν χρειάζεται να ορίσετε RewriteEngine περισσότερες από μία φορές στο αρχείο. Στην ιδανική περίπτωση, θα πρέπει να εμφανίζεται μόνο μία φορά στην κορυφή. Αλλά μπορεί να συμβεί οπουδήποτε.

  • Είναι αυστηρά άκυρο να συμπεριληφθεί RewriteBase περισσότερες από μία φορές. Ο τελευταίος κανόνας κερδίζει και ελέγχει ολόκληρο το αρχείο. (Αν και στο τρέχον σας. htaccess αρχείο δεν είναι απαραίτητη ούτως ή άλλως. Το RewriteBase επηρεάζει μόνο τις σχετικές υποκαταστάσεις διαδρομής. )

  • Μάλλον δεν χρειάζεστε τα περιτυλίγματα . Αυτά απαιτούνται μόνο εάν οι οδηγίες που περιέχουν είναι προαιρετικές . Εάν ο ιστότοπός σας λειτουργεί κανονικά αν δεν είναι διαθέσιμο το mod_rewrite; Αν αυτό είχε εγκατασταθεί σε ένα διακομιστή όπου δεν ήταν διαθέσιμο το mod_rewrite τότε απλά θα αποτύχει σιωπηλά και θα προσπαθήσει να συνεχίσει (και ίσως να σπάσει αργότερα). Χωρίς το δοχείο θα αποτύχει αμέσως με ένα σφάλμα και θα ξέρεις γρήγορα ποιο είναι το πρόβλημα. Το WordPress έχει σχεδιαστεί για να λειτουργεί σε συστήματα χωρίς mod_rewrite, αλλά δεν έχετε τα ίδια όμορφα URL.