Πώς να ανακατευθύνετε σε άλλη σελίδα php. Πώς να ορίσετε μια ανακατεύθυνση σε άλλη διεύθυνση URL στην PHP πριν φορτώσει η σελίδα

Αυτο 26.04.2019

Πόσο συχνά χρειάζεται να ανακατευθύνετε τον χρήστη σε άλλη σελίδα; Είμαι σίγουρος ότι δεν είναι ασυνήθιστο. Για την πραγματοποίηση αυτής της εργασίας χρησιμοποιούνται διάφορες μέθοδοι.

Ανακατεύθυνση σε javascript

Στη σελίδα από την οποία θέλετε να ανακατευθύνετε τον χρήστη, ορίστε τον ακόλουθο κώδικα:

window.location.href = "http://www.site"

Αντί για http://www.site, καθορίστε τη σελίδα στην οποία θα πρέπει να ανακατευθυνθεί ο χρήστης. Η μέθοδος δεν λειτουργεί εάν η Javascript δεν είναι ενεργοποιημένη στο πρόγραμμα περιήγησης. Όμως, όπως δείχνει η πρακτική, σχεδόν όλοι οι χρήστες του ιστότοπου έχουν ενεργοποιημένη τη Javascript. Ταυτόχρονα όμως είναι απενεργοποιημένο για ρομπότ αναζήτησης.

Ανακατεύθυνση χρησιμοποιώντας τη μετα-ετικέτα ανανέωσης

Ας εκμεταλλευτούμε ετικέτες html. Η ετικέτα που υποδεικνύει τον χρόνο ανανέωσης της σελίδας μοιάζει με αυτό:

Η ετικέτα σε αυτήν τη φόρμα θα αναγκάσει τη σελίδα να ανανεωθεί στο πρόγραμμα περιήγησης μετά από 5 δευτερόλεπτα, αντικαθιστώντας τη διεύθυνση της σελίδας με τη νέα που καθορίζεται στην ετικέτα.
Αλλά δεν είμαστε ικανοποιημένοι με 5 δευτερόλεπτα, οπότε η τελική έκδοση της ετικέτας θα είναι η εξής:

< meta http-equiv = "refresh" content = "0;url=http://www.сайт" />

Το μειονέκτημα της ανακατεύθυνσης με ετικέτες και javascript είναι ότι αν μετακινηθεί ο ιστότοπος, αλλάξει ο τομέας ή μετακινηθούν αρχεία, το άρθρο παραμένει το ίδιο για τον χρήστη, αλλά όχι για τις μηχανές αναζήτησης. Επομένως, όταν μετακινείτε έναν ιστότοπο, δεν μπορείτε απολύτως να χρησιμοποιήσετε αυτές τις μεθόδους, καθώς ο κύριος ιστότοπος θα πέσει έξω από τα αποτελέσματα αναζήτησης λόγω του κενού του και ο νέος ιστότοπος δεν θα εμφανίζεται στα αποτελέσματα λόγω "λογοκλοπής". Ναι, ναι, οι μηχανές αναζήτησης θα αξιολογήσουν τον ιστότοπο ως λογοκλοπή. Και αυτός ο ιστότοπος έκλεψε περιεχόμενο από τον προηγούμενο ιστότοπό σας. Οι λογοκλοπές είναι σημαντικά χαμηλότεροι στα αποτελέσματα αναζήτησης. Μην κάνετε λάθη.

Ανακατεύθυνση εργαλείου PHP

Όλα είναι απλά εδώ. Πρέπει να στείλετε την κατάλληλη κεφαλίδα http

Η θλιβερή εμπειρία μας λέει ότι η κατάσταση του διακομιστή δεν πρέπει να παραμεληθεί.
Ένα από τα άρθρα μου βρέθηκε συχνά στα αποτελέσματα των μηχανών αναζήτησης. Αλλά αποφάσισα να το μεταφέρω σε άλλη διεύθυνση. Ως αποτέλεσμα, η διεύθυνση Α άλλαξε σε διεύθυνση Β. Ωστόσο, δεν έστειλα καμία επικεφαλίδα για τους επισκέπτες στη διεύθυνση Α. Μετά από λίγο καιρό, τα ρομπότ αναζήτησης βρήκαν επίσης τη σελίδα Β. Την ευρετηρίασαν, είδαν ότι συμπίπτει με τη σελίδα Α και την αγνόησαν. Μετά πήγαμε στη σελίδα Α, είδαμε ότι είχε εξαφανιστεί και τη διαγράψαμε από τη δική μας βάση δεδομένων.
Ως αποτέλεσμα, το άρθρο μου έπεσε από τα αποτελέσματα των μηχανών αναζήτησης.

Επομένως, μην ξεχάσετε να καθορίσετε τις απαραίτητες κεφαλίδες http κατά τη μεταφορά υλικών.

Προώθηση με μέσα διακομιστής apache(.htaccess)

Ίσως το πιο πολύ βολικό τρόποανακατευθύνει. Ένα παράδειγμα ανακατεύθυνσης σε νέο τομέα:

Έτσι, ανακατευθύνουμε το αίτημα από το αρχείο old.htm, που βρίσκεται στον ριζικό κατάλογο του ιστότοπου, στο αρχείο rewrite.html, που βρίσκεται στον κατάλογο newcategory.

Όπως έχετε ήδη παρατηρήσει (και όσοι δεν είχαν χρόνο έχουν ακόμα μια τελευταία ευκαιρία), το RewriteRule υποστηρίζει κανονικές εκφράσεις, που σας επιτρέπει να κάνετε ό,τι θέλετε με την ανακατεύθυνση.
Για παράδειγμα, έφτιαξα ένα αρχείο .htm με εικόνα (RewriteRule ^(.*).htm$ $1.jpg), π.χ. από τη διεύθυνση dog.htm το πρόγραμμα περιήγησης με ανακατεύθυνε στην εικόνα dog.jpg. Δεν θέλω να περιγράψω όλες τις δυνατότητες της ενότητας mod_rewrite, με τη βοήθεια της οποίας δουλεύαμε τώρα. Πολλά μαθήματα έχουν γραφτεί για αυτό, αλλά αν θέλετε, μπορείτε να το αναζητήσετε μόνοι σας Επιπλέον πληροφορίεςσχετικά με αυτό. (Για παράδειγμα, στα αγγλικά.)

Το πλεονέκτημα αυτής της μεθόδου είναι ότι είναι ανώδυνη. Δηλαδή, η μεταφορά υλικού και η επακόλουθη ανακατεύθυνση από την παλιά διεύθυνση στη νέα δεν θα επηρεάσει σε καμία περίπτωση τη θέση του ιστότοπου στην μηχανές αναζήτησης. Το σύστημα λειτουργεί το ίδιο με τις ανακατευθύνσεις php, εκτός από το ότι δεν απαιτεί εγκατάσταση php. Υπάρχει όμως και ένα μείον: η ανακατεύθυνση μέσω mod-rewrite φορτώνει τον διακομιστή λίγο περισσότερο από την ίδια ανακατεύθυνση μέσω php. Και η ενότητα mod-rewrite δεν είναι πάντα εγκατεστημένη στον Apache. Αν και οι περισσότεροι hosters το εγκαθιστούν τώρα, εξακολουθούν να υπάρχουν μεμονωμένες κλινικές περιπτώσεις όπου αυτή η ενότητα δεν είναι εγκατεστημένη.

Επιλέξτε τη μέθοδο που σας ταιριάζει καλύτερα και εγκαταστήστε την στον ιστότοπό σας!

Ας υποθέσουμε ότι θέλετε να εμφανίσετε τη σελίδα https://example.com/final.php σε χρήστες που μεταβαίνουν στη σελίδα https://example.com/initial.php. Αυτό μπορεί να γίνει με λίγα Μέθοδοι PHP, JavaScript και HTML. Σε αυτό το άρθρο, θα καλύψουμε καθεμία από τις μεθόδους που μπορείτε να χρησιμοποιήσετε για να ανακατευθύνετε την PHP σε άλλη σελίδα.

Εδώ είναι μερικές μεταβλητές που θα χρησιμοποιήσουμε:

Χρησιμοποιώντας τη συνάρτηση PHP header() για να ανακατευθύνετε μια διεύθυνση URL

Εάν θέλετε να προσθέσετε μια ανακατεύθυνση από το αρχικό.php στο final.php, μπορείτε να τοποθετήσετε τον ακόλουθο κώδικα στην ιστοσελίδα του αρχικού.php. Στέλνει μια νέα κεφαλίδα τοποθεσίας στο πρόγραμμα περιήγησης:

Εδώ χρησιμοποιούμε τη συνάρτηση PHP header() για να δημιουργήσουμε την ανακατεύθυνση. Πρέπει να τοποθετήσετε αυτόν τον κώδικα πριν από οποιοδήποτε HTML ή κείμενο. Διαφορετικά, θα λάβετε ένα σφάλμα ότι η κεφαλίδα έχει ήδη σταλεί. Μπορείτε επίσης να χρησιμοποιήσετε την προσωρινή μνήμη εξόδου για να αποτρέψετε αυτό το σφάλμα αποστολής κεφαλίδων. Στο παρακάτω παράδειγμα αυτή τη μέθοδοΟι ανακατευθύνσεις PHP εμφανίζονται σε δράση:

Για ανακατεύθυνση χρησιμοποιώντας λειτουργίες κεφαλίδας(), η συνάρτηση ob_start() πρέπει να είναι η πρώτη στο σενάριο της PHP. Αυτό θα αποτρέψει την εμφάνιση σφαλμάτων κεφαλίδας.

Οπως και πρόσθετο μέτρομπορείτε να προσθέσετε die() ή exit() αμέσως μετά την ανακατεύθυνση της κεφαλίδας, έτσι ώστε να μην εκτελείται ο υπόλοιπος κώδικας της ιστοσελίδας. Σε ορισμένες περιπτώσεις ρομπότ αναζήτησηςή τα προγράμματα περιήγησης ενδέχεται να μην δίνουν προσοχή στην κεφαλίδα Τοποθεσία. Τι περιέχει; πιθανές απειλέςγια την ασφάλεια του ιστότοπου:

Για να είμαστε σαφείς: η die() ή η exit() δεν έχουν καμία σχέση με τις ανακατευθύνσεις. Χρησιμοποιούνται για να εμποδίζουν την εκτέλεση του υπόλοιπου κώδικα στην ιστοσελίδα.

Κατά την ανακατεύθυνση σε μια σελίδα στην PHP, συνιστάται να χρησιμοποιείτε απόλυτες διευθύνσεις URL κατά τον καθορισμό της τιμής της κεφαλίδας τοποθεσίας. Αλλά οι σχετικές διευθύνσεις URL θα λειτουργήσουν επίσης. Μπορείτε επίσης να χρησιμοποιήσετε αυτήν τη δυνατότητα για να ανακατευθύνετε τους χρήστες σε εξωτερικούς ιστότοπους ή ιστοσελίδες.

συμπέρασμα Κώδικας JavaScript- ανακατεύθυνση χρησιμοποιώντας τη συνάρτηση PHP echo()

Αυτή δεν είναι μια καθαρή λύση PHP. Ωστόσο, είναι επίσης αποτελεσματικό. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση PHP echo() για να εξάγετε τον κώδικα JavaScript που θα χειριστεί την ανακατεύθυνση.

Εάν χρησιμοποιείτε αυτήν τη λύση, δεν θα χρειαστεί να χρησιμοποιήσετε προσωρινή αποθήκευση εξόδου. Αυτό αποτρέπει επίσης την εμφάνιση σφαλμάτων που σχετίζονται με την αποστολή κεφαλίδων.

Παρακάτω είναι μερικά παραδείγματα που χρησιμοποιούν διαφορετικά Μέθοδοι JavaScriptγια ανακατεύθυνση από την τρέχουσα σελίδα σε άλλη:

Το μόνο μειονέκτημα αυτής της μεθόδου ανακατεύθυνσης σε άλλη τοποθεσία PHP είναι ότι η JavaScript εκτελείται στην πλευρά του πελάτη. Και οι επισκέπτες σας μπορεί να έχουν απενεργοποιημένη τη JavaScript.

Χρήση μετα-ετικέτες HTML για ανακατεύθυνση

Μπορείτε επίσης να χρησιμοποιήσετε βασικό HTMLγια να εκτελέσετε μια ανακατεύθυνση. Μπορεί να φαίνεται αντιεπαγγελματικό, αλλά λειτουργεί. Και δεν χρειάζεται να ανησυχείτε για την απενεργοποίηση της JavaScript στο πρόγραμμα περιήγησής σας ή την αποστολή σφάλματος κεφαλίδων στο παρελθόν:

Μπορείτε επίσης να χρησιμοποιήσετε τελευταία γραμμήαπό το προηγούμενο παράδειγμα για αυτόματη ανανέωση της σελίδας κάθε "n" δευτερόλεπτα. Για παράδειγμα, ο ακόλουθος κώδικας θα ανανεώνει αυτόματα τη σελίδα κάθε 8 δευτερόλεπτα:

συμπέρασμα

Σε αυτό το άρθρο κάλυψα τρία διάφορες μεθόδουςανακατευθύνει από ευρετήριο php, καθώς και τα πλεονεκτήματα και τα μειονεκτήματά τους. Συγκεκριμένη ΜέθοδοςΠοιο θα πρέπει να χρησιμοποιηθεί εξαρτάται από τους στόχους του έργου.

Μετάφραση του άρθρου «Πώς μπορώ να κάνω μια ανακατεύθυνση σε διαφορετικό url πριν από τη φόρτωση της σελίδας στην PHP» από τη φιλική ομάδα του έργου.

Καλό κακό

(PHP 4, PHP 5, PHP 7)

κεφαλίδα — Αποστολή κεφαλίδας HTTP

Περιγραφή

κεφαλίδα (string $header [, bool $replace = TRUE [, int $http_response_code ]]) : void

Η header() χρησιμοποιείται για αποστολή HTTP-επικεφαλίδα. Η προδιαγραφή » HTTP/1.1 περιέχει λεπτομερή Περιγραφή HTTP- επικεφαλίδες.

Να θυμάστε ότι η συνάρτηση header() μπορεί να κληθεί μόνο εάν δεν έχουν σταλεί ακόμη δεδομένα στον πελάτη. Δηλαδή, θα πρέπει να έρχεται πρώτο στην έξοδο δεν πρέπει να υπάρχουν ετικέτες HTML, κενές γραμμές κ.λπ. Πολύ συχνά παρουσιάζεται σφάλμα κατά την ανάγνωση του κώδικαλειτουργίες αρχείου , όπως συμπερίληψη ή απαίτηση , υπάρχουν κενά ή κενά σε αυτόν τον κώδικακενές γραμμές


, τα οποία εκτυπώνονται πριν κληθεί η κεφαλίδα(). Τα ίδια προβλήματα μπορεί να προκύψουν όταν χρησιμοποιείτε PHP/HTML στο ίδιο αρχείο.

Λίστα παραμέτρων

Γραμμή τίτλου. Υπάρχουν δύο ειδικές κεφαλίδες. Ένα από αυτά ξεκινά με " HTTP/ " (η κεφαλαία δεν είναι σημαντική) και χρησιμοποιείται για την αποστολή κώδικα HTTP καταστάσεις . Για παράδειγμα, εάνΔιακομιστής ιστού Apache έχει ρυθμιστεί έτσι ώστε να ζητά ναανύπαρκτα αρχεία επεξεργάζεται χρησιμοποιώντας ένα σενάριο PHP (χρησιμοποιώντας την οδηγίαΈγγραφο σφάλματος ), πιθανότατα θα θέλετε να βεβαιωθείτε ότι δημιουργείται το σενάριοσωστός κωδικός

κατάσταση. Σε άλλουςειδικού τύπου Οι κεφαλίδες είναι "Τοποθεσία:". Σε αυτήν την περίπτωση, η συνάρτηση όχι μόνο στέλνει αυτήν την κεφαλίδα στο πρόγραμμα περιήγησης, αλλά επιστρέφει επίσης έναν κωδικό κατάστασης σε αυτόΔΙΕΥΘΥΝΩ ΠΑΛΙΝ 201 (302), εάν ο κωδικός δεν έχει οριστεί προηγουμένως ή.

3xx

Αντικαθιστώ

Η προαιρετική παράμετρος αντικατάστασης καθορίζει εάν θα πρέπει να αντικατασταθεί η προηγούμενη παρόμοια κεφαλίδα ή κεφαλίδα του ίδιου τύπου.

Από προεπιλογή, η κεφαλίδα θα αντικατασταθεί, αλλά αν περάσετε το FALSE , μπορείτε να καθορίσετε πολλές κεφαλίδες του ίδιου τύπου. Για παράδειγμα:

Http_response_code

Επιβάλλει έναν κωδικό απόκρισης HTTP. Σημειώστε ότι αυτό θα λειτουργήσει μόνο εάν η συμβολοσειρά κεφαλίδας δεν είναι κενή.

Επιστρεφόμενες τιμές

Αυτή η συνάρτηση δεν επιστρέφει τιμή μετά την εκτέλεση.

Λίστα αλλαγών Παραδείγματα

Παράδειγμα #1 Διάλογος λήψης

Εάν θέλετε να προειδοποιήσετε τον χρήστη να αποθηκεύσει τα δεδομένα που αποστέλλονται, όπως ένα αρχείο PDF που δημιουργείται, μπορείτε να χρησιμοποιήσετε την κεφαλίδα » Content-Disposition, η οποία αντικαθιστά το προτεινόμενο όνομα αρχείου και προκαλεί το πρόγραμμα περιήγησης να εμφανίζει ένα παράθυρο διαλόγου λήψης.

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

Σε ορισμένες περιπτώσεις, οι σελίδες σας δεν θα αποθηκευτούν προσωρινά από το πρόγραμμα περιήγησης, ακόμα κι αν δεν περάσατε αυτές τις κεφαλίδες. Τα προγράμματα περιήγησης έχουν ορισμένες ρυθμίσεις με τις οποίες ο χρήστης μπορεί να αλλάξει την κανονική πορεία της προσωρινής αποθήκευσης και να την απενεργοποιήσει. Θα πρέπει να παρακάμψετε τυχόν ρυθμίσεις που ενδέχεται να επηρεάσουν την προσωρινή αποθήκευση σεναρίων στέλνοντας τις παραπάνω κεφαλίδες.

Επιπλέον, για περιπτώσεις όπου χρησιμοποιούνται περίοδοι λειτουργίας, μπορείτε να ορίσετε τις ρυθμίσεις διαμόρφωσης session_cache_limiter() και session.cache_limiter. Αυτές οι ρυθμίσεις μπορούν να χρησιμοποιηθούν για την αυτόματη δημιουργία κεφαλίδων ελέγχου προσωρινής αποθήκευσης.

Σημειώσεις

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

Οι κεφαλίδες θα είναι προσβάσιμες και θα εμφανίζονται μόνο εάν το SAPI που χρησιμοποιείτε τις υποστηρίζει.

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

Για να επιλύσετε αυτό το ζήτημα, μπορείτε να αποθηκεύσετε την έξοδο του σεναρίου. Σε αυτήν την περίπτωση, όλα τα δεδομένα εξόδου θα αποθηκευτούν στο διακομιστή μέχρι να δοθεί μια ρητή εντολή για την προώθηση των δεδομένων. Μπορείτε να ελέγξετε την προσωρινή μνήμη χειροκίνητα χρησιμοποιώντας τις συναρτήσεις ob_start() και ob_end_flush() ή ορίζοντας την οδηγία output_bufferingστο αρχείο διαμόρφωσης php.ini ή προσαρμόζοντας ανάλογα τη διαμόρφωση του διακομιστή.

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

Η γραμμή κεφαλίδας κατάστασης HTTP θα αποστέλλεται πάντα πρώτη στον πελάτη, ανεξάρτητα από το αν η αντίστοιχη κλήση συνάρτησης κεφαλίδας() ήταν πρώτη ή όχι. Αυτή η κατάσταση μπορεί να αντικατασταθεί καλώντας την κεφαλίδα() με νέα γραμμήδηλώνει ανά πάσα στιγμή μπορούν να σταλούν κεφαλίδες HTTP.

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

Στη Microsoft Internet ExplorerΤο 4.01 έχει ένα σφάλμα που το εμποδίζει να λειτουργήσει. Δεν υπάρχει τρόπος γύρω από αυτό. ΣΕ Microsoft Internet Ο Explorer 5.5 έχει επίσης αυτό το σφάλμα, αλλά μπορεί ήδη να διορθωθεί με εγκατάστασηΠακέτο υπηρεσίας

2 ή υψηλότερο. Σημείωση: Εάν είναι ενεργοποιημένη η ασφαλής λειτουργία, θα προστεθεί το uid του σεναρίουβασίλειο εξαρτήματα WWW-Authenticate

Παράδειγμα #2 Οδηγίες για εργασία με κρυφή μνήμη

κεφαλίδα (χρησιμοποιείται για έλεγχο ταυτότητας HTTP). Η προδιαγραφή HTTP/1.1 απαιτεί ένα απόλυτο URI ως όρισμα » Location:, συμπεριλαμβανομένου του σχήματος, του ονόματος κεντρικού υπολογιστή καιαπόλυτη διαδρομή



, αν και ορισμένοι πελάτες μπορούν να δέχονται σχετικά URI. Μπορείτε να δημιουργήσετε ένα απόλυτο URI μόνοι σας χρησιμοποιώντας $_SERVER["HTTP_HOST"] , $_SERVER["PHP_SELF"] και dirname() :

Τα λειτουργικά συστήματα Windows που ξεκινούν με Vista χρησιμοποιούν ενσωματωμένο...