Mai multe tipuri diferite de răspuns la browser-ul va duce la o redirecționare. Acestea variază dacă afectează anteturile HTTP sau conținutul HTML. Tehnicile utilizate de obicei depind de rolul persoanei care o implementează și de accesul acesteia la diferite părți ale sistemului. De exemplu, un autor web fără control asupra anteturilor ar putea utiliza o meta-etichetă de reîmprospătare, în timp ce un administrator de server web care redirecționează toate paginile de pe un site este mai probabil să utilizeze configurația serverului.,
Manual redirectEdit
Cea mai simplă tehnică este de a cere vizitatorilor să urmați un link-ul de la pagina noua, de obicei, folosind o ancoră HTML astfel:
Please follow <a href="http://www.example.com/">this link</a>.
Această metodă este deseori folosită ca o toamna-spate — în cazul în care browser-ul nu are suport de redirecționare automată, vizitatorul poate încă să ajungă la țintă document urmând link-ul.
coduri de stare HTTP 3xxedit
în protocolul HTTP utilizat de World Wide Web, o redirecționare este un răspuns cu un cod de stare care începe cu 3 care determină un browser să afișeze o altă pagină., Dacă un client întâlnește o redirecționare, trebuie să ia o serie de decizii privind modul de gestionare a redirecționării. Diferite coduri de stare sunt utilizate de către clienți pentru a înțelege scopul redirecționării, modul de gestionare a cache-ului și ce metodă de solicitare să utilizeze pentru solicitarea ulterioară.
HTTP/1.1 definește mai multe coduri de stare pentru redirecționare (RFC 7231):
- 300 Opțiuni multiple (de exemplu, oferă limbi diferite)
- 301 Mutat permanent (redirecționează permanent de la un URL la altul care trece link-ul de capital la pagina redirecționat)
- 302 găsit (inițial „redirecționare temporară” în HTTP / 1.,0 și folosit popular pentru scripturile CGI; înlocuit de 303 și 307 în HTTP/1.,i> 303 alte vedea (forțele o cerere la URL-ul nou, chiar dacă cererea inițială a fost de POST)
- 307 redirecționare temporară (oferă un nou URL-ul pentru browser-ul pentru a retrimite un GET sau POST)
- 308 redirecționare permanentă (oferă un nou URL-ul pentru browser-ul pentru a retrimite un GET sau POST)
Redirecționare coduri de stare și characteristicsEdit
Cod de Stare HTTP | Versiunea HTTP | Temporară / Permanentă | Cacheable | Metoda Cerere Cerere Ulterioară |
---|---|---|---|---|
301 | HTTP/1.,0 | Permanent | Yes | GET / POST may change |
302 | HTTP/1.0 | Temporary | not by default | GET / POST may change |
303 | HTTP/1.1 | Temporary | never | always GET |
307 | HTTP/1.1 | Temporary | not by default | may not change |
308 | HTTP/1.,1 | Permanent | implicit | nu se poate schimba |
Toate aceste coduri de stare necesită URL-ul de redirecționare țintă pentru a fi date în Locație: antet de răspuns HTTP. Cele 300 de opțiuni multiple vor Lista, de obicei, toate opțiunile din corpul mesajului și vor afișa alegerea implicită în antetul locație:.
(codurile de stare 304 nu sunt modificate și 305 folosesc proxy nu sunt redirecționări).,
Exemplu de răspuns HTTP pentru un 301 redirectEdit
UN răspuns HTTP cu 301 „s-a mutat definitiv” redirect pare ca acest lucru:
Utilizarea server-side scripting pentru redirectionEdit
Web autori producătoare de conținut HTML pot crea, de obicei, redirects folosind HTTP anteturile ca acestea sunt generate în mod automat de către serverul de web program atunci când servesc un fișier HTML. Același lucru este valabil de obicei chiar și pentru programatorii care scriu scripturi CGI, deși unele servere permit scripturilor să adauge anteturi personalizate (de exemplu, activând „anteturi care nu sunt analizate”)., Multe servere web vor genera un cod de stare 3xx dacă un script emite o linie de antet „locație:”. De exemplu, în PHP, se poate folosi funcția „header”:
header('HTTP/1.1 301 Moved Permanently');header('Location: http://www.example.com/');exit();
Mai multe anteturi pot fi necesare pentru a preveni cache-ul. Programatorul trebuie să se asigure că anteturile sunt transmise în fața corpului. Acest lucru nu se poate potrivi cu ușurință cu fluxul natural de control prin cod. Pentru a vă ajuta în acest sens, unele cadre pentru generarea de conținut din partea serverului pot tampona datele corpului., În ASP limbaj de scripting, acest lucru poate fi, de asemenea, realizată folosind response.buffer=true
și response.redirect "http://www.example.com/"
HTTP/1.1 permite, fie o rudă URI de referință sau absolută URI de referință. Dacă referința URI este relativă, clientul calculează referința URI absolută necesară conform regulilor definite în RFC 3986.
Apache HTTP Server mod_rewriteEdit
extensia Apache HTTP Server mod_alias poate fi utilizată pentru a redirecționa anumite solicitări., Directivele tipice de configurare arata ca:
pentru rescrierea URL-ul mai flexibil și redirecționare, Apache mod_rewrite poate fi folosit. E. g., pentru a redirecționa un solicitările la un canonic nume de domeniu:
RewriteEngine onRewriteCond %{HTTP_HOST} ^(+\.)*oldsite\.example\.com\.?(:*)?$ RewriteRule ^(.*)$ http://newsite.example.net/$1
Astfel de configurație poate fi aplicat la una sau toate site-urile de pe server prin intermediul serverului de fișiere de configurare sau la un singur conținut de director printr-un .htaccess
fișier.,Nginx are un modul integrat de rescriere http, care poate fi folosit pentru a efectua procesarea URL avansată și chiar generarea de pagini web (cu Directiva return). Un exemplu care arată o astfel de utilizare avansată a modulului de rescriere este mdoc.su, care implementează un serviciu de scurtare URL determinist în întregime cu ajutorul limbajului de configurare nginx singur.
de exemplu, în cazul în care o cerere de /DragonFlyBSD/HAMMER.5 ar fi trebuit să vină, mai întâi ar fi redirecționat intern către /d/HAMMER.,5 cu primul rescrie directiva de mai jos (numai afectează starea internă, fără nici HTTP răspunsurile emise către client încă), și apoi cu cel de-al doilea rescrie directivă, un răspuns HTTP cu un 302 Găsit codul de stare vor fi emise la client pentru a redirecționa de fapt externe script cgi web-om:
Refresh Meta tag și HTTP refresh headerEdit
Netscape a introdus meta refresh caracteristică care actualizează o pagină după o anumită perioadă de timp. Aceasta poate specifica o nouă adresă URL pentru a înlocui o pagină cu alta. Acest lucru este acceptat de majoritatea browserelor web., Un timeout de zero secunde efecte o redirecționare imediată. Aceasta este tratată ca o redirecționare permanentă 301 de către Google, permițând transferul PageRank către pagina țintă.
acesta este un exemplu de document HTML simplu care utilizează această tehnică:
această tehnică poate fi utilizată de autori web, deoarece meta tag-ul este conținut în interiorul documentului în sine. Eticheta meta trebuie plasată în secțiunea” cap ” a fișierului HTML. Numărul ” 0 ” din acest exemplu poate fi înlocuit cu un alt număr pentru a obține o întârziere de mai multe secunde., Ancora din secțiunea „corp” este destinată utilizatorilor ale căror browsere nu acceptă această caracteristică.
același efect poate fi obținut cu un HTTP refresh
antet:
acest răspuns este mai ușor de generat de programele CGI, deoarece nu este nevoie să schimbați codul de stare implicit.
aici este un program simplu CGI care Efecte această redirecționare:
notă: de obicei, serverul HTTP adaugă linia de stare și antetul conținut-lungime în mod automat.,
W3C descurajează utilizarea meta refresh, deoarece nu comunică nicio informație despre resursa originală sau nouă, browserului (sau motorului de căutare). Ghidul de accesibilitate a conținutului web al W3C (7.4) descurajează crearea de pagini de actualizare automată, deoarece majoritatea browserelor web nu permit utilizatorului să dezactiveze sau să controleze rata de actualizare. Unele articole pe care le-au scris pe această temă includ W3C Web Content Accessibility Guidelines (1.0): asigurați controlul utilizatorului asupra modificărilor de conținut sensibile la timp, utilizați redirecționări standard: nu rupeți butonul înapoi!, și tehnici de bază pentru orientările privind accesibilitatea conținutului Web 1.0 Secțiunea 7.
JavaScript redirectsEdit
JavaScript poate provoca o redirecționare de setarea window.location
atribut, de exemplu:
window.location='http://www.example.com/'
în mod Normal, JavaScript împinge redirector URL a site-ului la istoria browser-ului. Poate provoca bucle de redirecționare atunci când utilizatorii apasă butonul înapoi. Cu următoarea comandă puteți preveni acest tip de comportament.,
window.location.replace('http://www.example.com/')
cu toate acestea, anteturile HTTP sau meta tag-ul de reîmprospătare pot fi preferate din motive de securitate și deoarece JavaScript nu va fi executat de unele browsere și de multe crawlere web.un efect ușor diferit poate fi obținut prin crearea unui cadru inline:
<iframe height="100%" width="100%" src="http://www.example.com/">Please follow <a href="http://www.example.com/">link</a>.</iframe>
o diferență principală față de metodele de redirecționare de mai sus este că pentru o redirecționare cadru, browserul afișează adresa URL a Documentului cadru și nu adresa URL a paginii țintă în bara URL., Această tehnică de camuflare poate fi utilizată astfel încât cititorul să vadă o adresă URL mai memorabilă sau să ascundă în mod fraudulos un site de phishing ca parte a falsificării site-urilor web.
înainte de HTML5, același efect ar putea fi făcut cu un cadru HTML care conține pagina țintă:
redirecționare chainsEdit
o redirecționare poate duce la alta. De exemplu, URL-ul „http://wikipedia.com” (cu „*.com”, ca domeniu) este primul redirecționat către https://www.wikipedia.org/ (cu numele de domeniu în .org), în cazul în care puteți naviga la limba-ul specific., Acest lucru este inevitabil dacă diferitele legături din lanț sunt deservite de servere diferite, deși ar trebui minimizate prin rescrierea URL-ului cât mai mult posibil pe server înainte de a-l returna în browser ca redirecționare.
Wikipedia își redirecționează implicit paginile către HTTPS din 2015.
Redirect loopsEdit
uneori, o greșeală poate duce la o pagină pentru a ajunge redirecționarea înapoi la sine, eventual prin alte pagini, ceea ce duce la o secvență infinită de redirecționări. Browserele ar trebui să înceteze redirecționarea după un anumit număr de hamei și să afișeze un mesaj de eroare.
HTTP / 1.,1 stări Standard:
un client ar trebui să detecteze și să intervină în redirecționări ciclice (adică, bucle de redirecționare” infinite”).notă: o versiune anterioară a acestei specificații a recomandat maximum cinci redirecționări (, secțiunea 10.3). Dezvoltatorii de conținut trebuie să fie conștienți de faptul că unii clienți ar putea implementa o astfel de limitare fixă.