Kako nastaviti preusmeritev na drug URL v PHP, preden se stran naloži? Evroliga moški ucp php preusmeritev

6.1K

Recimo, da želite prikazati stran https://example.com/final.php uporabnikom, ki obiščejo stran https://example.com/initial.php. To je mogoče storiti z nekaj PHP metode, JavaScript in HTML. V tem članku bomo obravnavali vse metode, ki jih lahko uporabite za preusmeritev PHP na drugo stran.

Tukaj je nekaj spremenljivk, ki jih bomo uporabili:

Uporaba funkcije PHP header() za preusmeritev URL-ja

Če želite dodati preusmeritev iz initial.php v final.php, lahko postavite naslednjo kodo na spletno stran initial.php. Brskalniku pošlje novo glavo lokacije:

Tu uporabljamo funkcijo PHP header() za ustvarjanje preusmeritve. To kodo morate postaviti pred kateri koli HTML ali besedilo. V nasprotnem primeru boste prejeli sporočilo o napaki, da je bila glava že poslana. Uporabite lahko tudi medpomnilnik izhoda, da preprečite to napako pri pošiljanju glav. Naslednji primer prikazuje to tehniko preusmeritve PHP v akciji:

Za izvedbo preusmeritve s funkcijo header() mora biti funkcija ob_start() prva funkcija v skriptu PHP. To bo preprečilo pojav napak v glavi.

Kot dodaten ukrep lahko takoj za preusmeritvijo glave dodate die() ali exit(), tako da se preostala koda spletne strani ne izvede. V nekaterih primerih iskalni roboti ali brskalniki morda ne bodo pozorni na navedbo v glavi Location. Kakšne so možne grožnje varnosti spletnega mesta:

Da bo jasno: die() ali exit() nimata nobene zveze s preusmeritvami. Uporabljajo se za preprečevanje izvajanja preostale kode na spletni strani.

Pri preusmerjanju na stran v PHP je pri podajanju vrednosti glave Location priporočljivo uporabiti absolutne URL-je. Vendar bodo delovali tudi relativni URL-ji. To funkcijo lahko uporabite tudi za preusmeritev uporabnikov na zunanja spletna mesta ali spletne strani.

Izpis kode za preusmeritev JavaScript s funkcijo PHP echo().

To ni čista rešitev PHP. Vendar pa je tudi učinkovito. S funkcijo PHP echo() lahko izpišete kodo JavaScript, ki bo obravnavala preusmeritev.

Če uporabljate to rešitev, vam ne bo treba uporabljati medpomnilnika izhoda. To prav tako preprečuje pojav napak, povezanih s pošiljanjem glav.

Spodaj je nekaj primerov uporabe različne metode JavaScript za preusmeritev s trenutne strani na drugo:

Edina slaba stran tega načina preusmeritve na drugo spletno mesto PHP je, da se JavaScript izvaja na strani odjemalca. In vaši obiskovalci imajo morda onemogočen JavaScript.

Uporaba metaoznak HTML za preusmeritev

Za izvedbo preusmeritve lahko uporabite tudi osnovni HTML. Morda se zdi neprofesionalno, vendar deluje. In ni vam treba skrbeti, da je JavaScript onemogočen v vašem brskalniku ali da ste predhodno poslali napako glave:

Zadnjo vrstico iz prejšnjega primera lahko uporabite tudi za samodejno osvežitev strani vsakih "n" sekund. Naslednja koda bo na primer samodejno osvežila stran vsakih 8 sekund.

Pozdravljeni prijatelji. Danes bi rad razpravljal o zelo zapleteni, a vedno relevantni temi - to je preusmeritev 301 (Trajna preusmeritev 301) - v skupnosti SEO in brez formalnosti je točno to, kar pomeni beseda "preusmeritev". Tehnično je to odgovor strežnika na zahtevo do njega; ta odgovor ima kodo 301, kar pomeni, da je bil naslov zahteve trajno premaknjen. Kot rezultat vseh teh zvitih mahinacij bi morali dobiti nek nov končni naslov.

Menim, da teh tehničnih vidikov ne potrebujete, zato želim govoriti o uporabnih stvareh - kdaj in v kakšnih situacijah je bolje uporabiti preusmeritev, kako in s katerimi ukazi lahko konfigurirate pravila preusmeritve itd. Upoštevali bomo tudi orodja in storitve, s katerimi lahko preverite pravilnost preusmeritev.

Ker se je objava izkazala za zelo dolgo, sem se za vaše udobje odločil narediti kazalo:

Kdaj MORATE izvesti preusmeritev 301?

Prvič, preusmeritev se uporablja, ko stran (skupina strani ali celoten razdelek) spremeni svoj naslov - najpogosteje se to zgodi, ko se spremeni struktura spletnega mesta, preimenuje glavni del url-ja ali spremenjen je princip oblikovanja naslovov (z drugimi besedami CNC). Na žalost vsi ne razmišljajo o tem, ko nekaj spremenijo na spletnem mestu, zato je veliko dvojnikov, kar vodi v izgubo pozicij ali celo uvedbo sankcij s strani iskalnikov. Pri svojem delu se zelo pogosto srečujem s takšnimi situacijami in stane veliko živcev, da vse popravim in nevtraliziram posledice. V svojem imenu lahko priporočam, da pred kakršnimi koli deli na spreminjanju tipa CNC ali spreminjanju strukture naredite načrt trenutne strukture spletnega mesta, vseh njegovih razdelkov in primerov končnih strani. Vse to bo treba po končanem delu preveriti, da ko gremo na stari naslov pridemo na novega, strežnik pa da preusmeritev s kodo 301 (in ne 302).

Naslednja običajna uporaba preusmeritev 301 je spreminjanje naslova spletnega mesta ali lepljenje ogledal. Če se odločite za spremembo spletnega naslova v zvezi s prenovo blagovne znamke podjetja ali registracijo nove, lepše in krajše domene za označevanje na tiskanih promocijskih izdelkih, je zelo pomembno, da uporabnik ob dostopu do naslova na stari domeni konča na isti strani (in ne na domača stran), vendar na novi domeni. Kar zadeva promocijska spletna mesta, so običajno sestavljena iz ene ali dveh strani, povezave iz katerih vodijo na glavno spletno mesto, oziroma ko greste na promocijsko spletno mesto, ste takoj preusmerjeni na posebno stran na glavnem spletnem mestu. Včasih je pri izdelavi spletnega mesta registriranih več domen hkrati, na primer zaradi dvoumnega črkovanja imena podjetja v latinici. Za zagotovitev, da ob intuitivnem vnosu naslova uporabnik pride na pravo mesto in je registriranih več domen, je zelo pomembno, da se 301 preusmeritev zgodi z vseh "pomožnih" domen na en glavni naslov. V nobenem primeru isto spletno mesto ne sme biti dostopno na vseh naslovih.

In tudi o ogledalih - lahko se zgodi, da bo vaše spletno mesto na voljo na naslovih http://www.site.ru, http://site.ru in https://site.ru (slednje je redko, vendar zgodi) - vse to so klasične napake, ki jih ne bi smeli delati, pri njihovem reševanju pa sodeluje 301 preusmeritev. Tako kot pri različnih naslovih spletnih strani se morate odločiti za glavno ogledalo (z www ali brez www) in nastaviti preusmeritve na glavno ogledalo. Iskalniki seveda niso neumni in se v takšnih situacijah pogosto znajdejo sami, pri tem pa jim lahko pomagate tudi vi. pravilne nastavitve v ploščah za spletne skrbnike in v robots.txt (za Yandex, direktiva Host). Toda SEO je občutljiva zadeva in ne bi se zanašal na srečo, ampak uporabil preverjeno metodo!

Včasih pride do zelo neprijetne situacije, ko kopija spletnega mesta postane na voljo ne samo, ko v naslovno vrstico vnesete ime domene, temveč tudi naslov IP strežnika. Pri deljenem gostovanju se to verjetno ne bo zgodilo, če pa imate namenski strežnik, se to zlahka zgodi. To je lahko razlog za nepravilno konfiguracijo strežnika - onemogočanje dostopa pri dostopu do naslova IP bo pomagalo rešiti težavo, vendar je najboljša rešitev tukaj preusmeritev 301 na ravni spletnega strežnika (Apache ali Nginx). Pred nekaj meseci sem imel ravno takšno situacijo - imel sem namenski strežnik, na katerem so visela nekatera spletna mesta, vendar sem se za eno od spletnih mest odločil vzeti drug ločen strežnik. Stran sem prenesla, vse je delovalo kot po maslu, potem pa sem nekega dne v Googlovih rezultatih naletela na klon svoje strani - šok, panika - izkazalo se je, da je to IP naslov mojega novega strežnika in seveda moje strani živi na njem in ob vzpostavitvi stika strežnik odgovori 200 OK, Google pa ga je v celoti indeksiral. Na prejšnjem strežniku te težave ni bilo, sprva je bila nastavljena preusmeritev 301 z IP-ja na domeno, ki je bila navedena kot glavna za ta IP. Zdaj sem se naučil iz grenkih izkušenj in vedno preverim takšne stvari - zavedajte se in vi, ne ponavljajte napak. Težavo so rešili tako, da so konfiguracijam spletnega strežnika nginx dodali preusmeritev na glavno domeno; primer kode bom prikazal v praktičnem delu objave spodaj.

Situacija je podobna prejšnji - ko se kopija spletnega mesta nahaja in je dostopna prek testne domene storitve, na primer site.hosting.ru. Takšni primeri se pojavljajo tudi v moji praksi in za razliko od prejšnjega primera je to značilno za virtualno gostovanje. Zakaj to obstaja? Na primer, še niste kupili domene ali prenašate spletno stran z enega gostovanja na drugega, vendar NS strežniki za domeno niso bili spremenjeni ali še niso posodobljeni DNS zapisi pri ponudniku. V takih situacijah se testne naslove, kjer lahko konfigurirate in namestite vse, preden naslov strani preusmerite na novo gostovanje. In nekateri gostitelji grešijo, ker ne blokirajo dostopa do takšnih tehničnih naslovov in niti ne prepovedo njihovega indeksiranja. Če imate to neprijetno situacijo, poskusite registrirati preusmeritev 301 s tehničnega naslova na glavnega v datoteki .htaccess.

In seveda preusmeritve 301 zelo rade uporabljajo prave SEO za boj proti različnim podvojenim stranem. Zakaj le pravi SEO? Da, ker so napačni ljudje vstopili na strankino spletno stran in, kar je zelo verjetno, začeli kupovati povezave, ne da bi sploh obiskali spletno stran - žal, to ni neobičajno. Občasno se name obrnejo stranke, ki želijo preveriti poštenost svojih izvajalcev/zaposlenih, ki so odgovorni za optimizacijo in promocijo strani, kako dobro poteka delo - - in doslej se še ni zgodilo, da ne bi našel napak ali pomanjkljivosti na spletnih mestih. Torej, ne pozabite - vedno vam z veseljem pomagam. Vrnimo se k dvojnikom - menim, da je namesto blokiranja dvojnikov pri indeksiranju potrebno preusmeriti na glavni naslov, kar pa ni tako zanimivo. Seveda je veliko primerov, ko so odvzemi vsiljeni, in potem ne morete brez kanonizacije, a če imate možnost narediti preusmeritev, se prepričajte, da to storite. Pogosti primeri dvojnikov, ki jih je treba vedno preveriti: naslovi s poševnico na koncu in brez nje, naslovi s parametri in oznakami - spodaj vam bom povedal, kako to rešiti.

Kdaj lahko izvedete preusmeritev 301?

V tem razdelku ne morete veliko napisati, vendar bom poskusil. Resnično upam, da mi boste po branju dodali nekaj idej v komentarjih.

Preusmeritev 301 lahko uporabite kot odziv strežnika namesto napake 404 Ni najdeno– z drugimi besedami, uporabnik, ki sledi napačni povezavi ali neobstoječi strani, ne bo videl sporočila »Oprostite, ta stran ne obstaja več«, ampak bo preusmerjen na drugo obstoječo stran. To je med strokovnjaki zelo sporna točka, zato nikomur ne vsiljujem svojega mnenja. Jaz pa namesto napake 404 raje uporabim preusmeritev, možnosti za razvoj dogodkov pa je več... Poglejte, obstajata 2 kategoriji napak 404: prva je klasična, ko je stran dejansko izbrisana, drugič, ko se napaka pojavi zaradi ukrivljenih zunanjih povezav. V prvem primeru verjetno ne bi smeli narediti preusmeritve, ampak pustite napako 404, kot je. Toda v drugem primeru morate poskrbeti za preusmeritev na pravilen url naslov, če ga je mogoče obnoviti iz pokvarjene povezave, ali preusmeritev na glavno stran (ali kategorijo).

Kdaj NE narediti preusmeritve 301

Nekaj ​​besed o tem, kdaj vam lahko preusmeritev škoduje in se je zato ne sme uporabljati v naslednjih situacijah.

Najpomembneje je, da se izognete napakam, ne smete se ukvarjati s preusmeritvami, če niste 100% prepričani o tem, kar počnete, ali dvomite v nekaj. Vzemi to kot prijateljski nasvet :)

Trajna preusmeritev se ne sme uporabljati za začasne rešitve, to je razvidno iz njenega imena - za začasno premestitev uporabite 302 Moved Temporarily. V tem primeru strani ne bodo zlepljene in stran s preusmeritvijo je mogoče kadar koli obnoviti.

Če imate težave z vašo domeno, na primer filtri, prepovedi itd., In se odločite spremeniti naslov spletnega mesta (domeno), potem ne smete izvajati preusmeritve 301 s stare domene na novo - kot rezultat , boste “zlepili” in vse težave starega. Se pravi, na koncu se ne bo nič spremenilo. Da, nekaj časa je obstajala rešitev za izhod iz filtra Google Penguin s polno preusmeritvijo 301 s stare domene na novo. Res so bile vse pozicije povrnjene na raven pred sankcijami in to se je zdelo kot zdravilo za zlobnega Pingvina, a z naslednjo posodobitvijo algoritma je bila ta lastnost upoštevana in tudi nova domena je padla pod filter, posledično se po zamenjavi domene ni nič izboljšalo. Če ste se že odločili za zamenjavo domene, potem lahko poskusite vso vsebino prenesti na novo domeno, na stari pa jo zbrišete in nalepite škrbino s sporočilom o selitvi, še bolje pa začnite znova iz nič.

Preusmeritev 301 lahko naredite na več načinov: prek htaccess, php, javascript, nastavitev strežnika itd. - zato ne poskušajte uporabiti vseh metod hkrati, verjetnost "nesoglasij" med različne poti in lahko na primer dobite neskončno ciklično preusmeritev.

Ko delate s kompleksno strukturo spletnega mesta ali preoblikujete velik portal, pogosto pride do več preusmeritev ali dolgih verig. To pomeni, da do preusmeritve ne pride v enem koraku, ampak v dveh ali več – to je slaba situacija in se ji je treba izogniti, če je le mogoče. Ko kliknete na to povezavo iskalni robot, ki je prejel več preusmeritev zaporedoma, lahko misli, da je zaveden, in preneha slediti naprej ter popolnoma preneha upoštevati povezave. Tukaj je primer iz moje prakse: nekoč sem naletel na spletno mesto za revizijo s tako nepričakovano verigo:

http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php

In na koncu stran http://www.site.ru/404.php, ki bi morala dati napako 404, daje odgovor 200 OK. To mi je celo padlo na pamet, a predstavljajte si, kaj bi si mislil iskalni robot, če bi prišel v takšen vrtiljak! Ne samo, da so v verigi sodelovale tri različne domene, ampak tudi stran z napako pravi, da ne gre za napako in jo je treba indeksirati.

Če je mogoče, si prizadevajte za odsotnost preusmeritev znotraj spletnega mesta – če zunanjih povezav do spletnega mesta ni mogoče popraviti in je preusmeritev neizogibna, je treba popraviti notranje povezave. To morda ne bo vplivalo na kakovost indeksiranja in razvrščanja, vendar ne morete biti prepričani, zato se je takšnim spornim situacijam bolje izogniti. Čudovit vam bo pomagal pri sledenju notranjim preusmeritvam in na splošno napakam na spletnem mestu.

Pri ustvarjanju pravil preusmeritve v .htaccess izključite dejanske naslove imenikov in datotek na strežniku ter spremljajte izbiro. Situacija za spletno stran, ki sem jo nekoč revidiral, je bila, da je spletni skrbnik v boju s podvojenimi stranmi kategorij s poševnico na koncu in brez nje nekoliko pretiraval in, nasprotno, le še poslabšal težavo. Ne samo, da so pravila prepisovanja vplivala na dejanske skripte js in datoteke s slogom css, zaradi česar so prenehale delovati pravilno, ampak so nekatere strani na koncu prejele nepotrebno poševnico in pojavili so se dvojniki. Prijatelji, skrbno zagotovite, da pravila, ki jih ustvarite, veljajo samo za skupino naslovov, s katerimi delate, in omejite vse druge.

Če želite poiskati problematične strani in njihove naslove, ki se jih morate znebiti, uporabite zmogljivosti plošč za spletne skrbnike Yandexa in Googla. Za spletnega skrbnika Yandex: izberite spletno mesto -> Indeksiranje spletnega mesta -> Izključene strani. Za Google Webmaster: Izberite stran –> Optimizacija –> Optimizacija HTML; In tudi: Izberite spletno mesto -> Konfiguracija -> Parametri URL-ja.

Funkcije indeksiranja in ponovnega indeksiranja preusmeritev v Yandexu in Googlu. Ko se borite s podvojenimi in problematičnimi naslovi, boste seveda čakali, da bodo napake odstranjene iz plošč spletnega skrbnika; tukaj je nekaj funkcij. Z Googlom je vse preprosto - nastavite preusmeritve, spremembe bodo indeksirane v 2 tednih, v istem času bodo napake začele izginjati s plošče za spletne skrbnike, običajno po enem mesecu vse napake izginejo. Pri Yandexu obstaja subtilnost in ta je naslednja: po nastavitvi preusmeritev lahko večno čakate, da napake izginejo s plošče.Nekoč sem čakal šest mesecev, dokler nisem pisal podpori, kjer so me obvestili, da poleg na preusmeritev, je potrebno dodatno zapreti problematične strani v robots.txt in šele takrat bodo izginile iz skrbniške plošče.

Trajna preusmeritev 301 prek .htaccess

Ta način namestitve preusmeritev je najbolj priljubljen in najpreprostejši. Čeprav, moram priznati, ni vse tako preprosto, kot se zdi, zato nameravam napisati ločeno objavo o htaccess. Na pozitivni strani ta metoda Opozoriti je treba, da se preusmeritev sproži na ravni strežnika in preden se začne obdelava katerega koli skripta spletnega mesta, in ne nosi dodatne obremenitve.

Verjetno že imate datoteko .htaccess na strežniku (v korenu, kjer je glavni index.php). Če ta datoteka ni vidna:

  • Preverite nastavitve upravitelja ftp, lahko skrije sisteme in datoteke, kar je datoteka htaccess
  • Pojdi do upravitelj datotek prek nadzorne plošče gostitelja in preverite dovoljenja za datoteko. Ne mislim CHMOD, ampak skupina in uporabnik, na primer, lahko obstaja root uporabnik, in se povežete prek ftp z uporabniškim dostopom lastnika domene.
  • Datoteka morda preprosto ne obstaja :) Potem bi jo bilo treba ustvariti, vendar pod Windows včasih nastane težava, ker dejansko datoteko .htaccess sistem vidi kot datoteko brez imena in samo s pripono. Predlagam preprost način - ustvarite običajno txt datoteko, ji dodajte vrstico "RewriteEngine On" (brez narekovajev), naložite txt datoteko na strežnik, preimenujte datoteko v .htaccess na strežniku

Večino urejanj, povezanih s preusmeritvijo, je treba zapisati na samem začetku datoteke za vrstico »RewriteEngine On«, tako da se ta pravila najprej obdelajo. Pomembno je slediti zaporedju dejanj, ker ukaze strežnik obdeluje vrstico za vrstico od samega začetka do prvega pojava. Z drugimi besedami, vedno morate začeti z določenim vzorcem in končati s splošnim vzorcem.

Oglejmo si nekaj najbolj pogostih in uporabnih primerov:

301 preusmeritev za domeno iz www.site.ru na site.ru

RewriteCond %(HTTP_HOST) !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1

Zgornje možnosti preusmeritve delujejo odlično in ne zahtevajo nobenih sprememb z vaše strani - samo vstavite datoteko v datoteko .htaccess. Da pa bi bil 100 % varen, bi ti svetoval drugo možnost:

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

Prvi je za tiste, ki imajo glavno domeno z www, drugi pa za tiste brez www. V skladu s tem morate v obeh primerih vnesti ime vaše domene namesto "site".
Torej, zakaj so te možnosti boljše? Zelo preprosto, preverijo ne le odsotnost/prisotnost www v imenu domene, ampak tudi preverijo popolno skladnost imena domene.
Primer v živo: Zagotovo ste že naleteli na dejstvo, da lahko spletno mesto nepričakovano indeksira naslov storitve na gostovanju (takšen naslov je izdan, da lahko dostopate do spletnega mesta, preden povežete svojo pravo domeno), kakšno ogledalo ali celo IP naslov! Univerzalna pravila bodo torej samo preverjala odsotnost/prisotnost www in ni pomembno, do katere domene dostopa uporabnik ali iskalni robot.
Torej, z uporabo napredne možnosti boste 146% prepričani, da bo vaša stran dostopna samo in izključno z domeno, ki ste jo osebno določili in upoštevajoč www. Uporabljam samo to možnost in vam jo priporočam!

301 preusmeritev s http na https

Glede na množičen prehod spletnih mest na varen protokol, morate vedeti, kako preusmeriti s http na https. Mimogrede, če še niste izbrali potrdila SSL, preberite mojo objavo o .

V nadaljevanju vam ponujam več možnosti za preusmeritev 301 s protokola http na https, ki lahko delujejo ali pa tudi ne, odvisno od konfiguracije vašega strežnika, vendar vam bo zagotovo ustrezalo eno od pravil:

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(SERVER_PORT) !^443 $ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(SERVER_PORT) !^443$ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) off RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Preusmeri s protokola https na http (odkrito povedano, ne vem, zakaj bi to potreboval):

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) =on RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

Pred kratkim sem pisal zelo podrobna navodila. Če načrtujete prehod s https na https, si to dolžni prebrati!

Vnesel bom nekaj jasnosti v nerazumljivo gobbledygook:

  • RewriteCond označuje pogoj, ki bo, če se ujema, izvršil RewriteRule. Z uporabo regularni izrazi določeni so vzorci nizov.
  • Spremenljivke strežnika:
    • %(REQUEST_URI) - del URL-ja brez imena domene in parametrov GET, na primer za stran, ki jo trenutno berete: blog/post/4393,
    • %(HTTP_HOST) - gostitelj oz Domena, na primer: spletno mesto
    • %(QUERY_STRING) - niz z nizom parametrov GET, to je del URL-ja za vprašajem (in pred sidrno mrežo, če obstaja).
    • %(REQUEST_FILENAME) — polna pot V datotečni sistem strežnik v datoteko ali skript, ki ustreza tej zahtevi..php, toda v datotečnem sistemu strežnika je to grozna vrstica /var/www/site/data/www/site/index.php.
      Zgodi se, da pri preusmeritvi dobite nepričakovan rezultat, na primer, želeli ste odstraniti parametre post=17434801_4060 v naslovu http://site.ru/page-name?post=17434801_4060 , navedli ustrezna pravila ( o njih bomo pisali spodaj), a na koncu smo dobili vrstico http://site.ru/usr/local/www/site.ru/www/page-name - znebili smo se parametrov, dobili pa čuden naslov. To je vse zato, ker na začetku datoteke po vklopu RewriteEngine niste navedli direktive RewriteBase /, ki nastavi določen osnovni URL za transformacije v kontekstu imenika.
  • Metaznaki se uporabljajo za definiranje skupin znakov ali "oznak" v vzorcu:
    • ^ — oznaka začetka vrstice,
    • $ je oznaka konca vrstice,
    • ! – zanikanje,
    • \ - ubežna poševnica, vam omogoča, da metaznak, ki mu sledi, obravnavate kot običajni znak,
    • . – pika, označuje poljuben znak, vendar le enega,
    • () – združevanje.
  • Modifikatorji so postavljeni za navadnimi znaki, metaznaki ali njihovimi skupinami in razširjajo možnosti uporabe predlog:
    • ? — simbol se ponovi 0 ali 1-krat,
    • * — Ponovljeno od 0 do 65536-krat,
    • + — Ponovi se od 1 do 65536-krat.
  • Zastavice določajo dodatne možnosti za to pravilo in so navedene v oglati oklepaji ločeno z vejicami:
    • NC - (nocase) onemogoči preverjanje velikih in malih črk.
    • R - (preusmeritev) ustavi postopek pretvorbe in vrne rezultat brskalniku odjemalca kot preusmeritev na tej strani(302, PRESELJENO ZAČASNO). S to zastavico lahko podate drugačno kodo rezultata, na primer R=301 bo vrnilo preusmeritev s kodo 301 (TRAJNO PREMAKNJENO). Kot razumete, je to točno tisto, kar potrebujemo.
    • L - (zadnji) ustavi postopek pretvorbe in trenutna povezava se šteje za končno.

Najbolj priljubljen primer je preusmeritev 301 z index.php (html) na glavno stran. Na 90% spletnih mest obstaja težava s podvajanjem glavne strani na naslovih http://site.ru in http://site.ru/index.php (ali index.html, index.htm ali katero koli drugo možnost , ni pomembno ali celo vse naenkrat). Nekje je to očitno, ko na primer povezava iz logotipa vodi na site.ru, povezava v meniju pa na site.ru/index.php, nekje ni očitno, ko se pri vnosu najde dvojnik naslov iz index.php ročno. Pomembno je preprosto rešiti problem. In ponujam univerzalno možnost, tukaj je:

RewriteCond %(THE_REQUEST) ^(3 ,9 )\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

Samo prilepite to kodo nespremenjeno za vrstico za vrstico "RewriteEngine On" in ni problema!

Mnogi, ki se začnejo boriti z dvojniki na spletnem mestu, se sprašujejo, od kod prihajajo takšne povezave, ki podvajajo glavno stran http://site.ru/page-name.html&post=-1234567_8901? Od kod je prišla predpona &post=-1234567_8901 - to "dobro" je vzeto iz VKontakte, ko nekdo deli povezavo do vašega spletnega mesta na svojem zidu, v skupini ali javnosti, se samodejno doda podobna vrstica, očitno za sledenje nekaterim statistikam .

Da se enkrat za vselej znebite te neumnosti, morate v htaccess dodati:

RewriteCond %(REQUEST_URI) ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

Kot lahko vidite, med tem in prejšnjim primerom ni nobene razlike, tudi če imate &post= ali &sa= ali karkoli drugega v URL-ju, je rešitev enaka, le zamenjati morate očitne dele kode. jasno, kajne?

Znebite se parametrov ali oznak v naslovu

Vprašanje je bilo zastavljeno v komentarjih in večkrat na forumu, zato ga ni mogoče prezreti. Kaj storiti s takimi dvojniki: http://site.ru/?abrakadabra ali bolj resničen primer http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Ta primer je nekoliko drugačen od naslednje točke, kjer se bomo znebili parametrov za skript PHP, saj tukaj skriptu ne posredujemo običajnega naslova in parametrov. Tukaj je rešitev:

RewriteCond %(QUERY_STRING) ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php

%(QUERY_STRING) je niz z naborom spremenljivk za PHP, del URL-ja za vprašajem (in pred sidrom, če obstaja).

URL klica - http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
Zahtevani URL spada pod to pravilo, drugih pravil ni, zato bo RewriteRule izvedeno v spodnji vrstici.
RewriteRule ^(.*) \.php\?(.*) $ $1 \.php

Izvorni URL: http://site.ru/index .php?lang=ru
Predloga za razčlenjevanje URL-jev: ^(.*) \.php\?(.*) $
URL bo razčlenjen na spremenljivke: $1 = http://site.ru/index, $2 = lang=ru in sestavljen nazaj v obliki http://site.ru/index .php ($1 \.php)
In potem bo prišlo do preusmeritve 301 na nov url.

Primer pravil pri spreminjanju strukture spletnega mesta

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

To so vrstice, ki sem jih moral dodati v datoteko htaccess, ko sem spremenil strukturo svojega bloga.

Prej sem imel naslednje naslove: https://site/post/4358 in https://site/post/category/seo, kar je nekako porušilo logiko v strukturi - navsezadnje je blog le del spletnega mesta , vendar iz nekega razloga objave pripadajo spletnemu mestu, ne blogu, kategorije pa pripadajo objavam, kar je tudi popolnoma nelogično..info/blog/category/seo - zdaj je blog ločen del spletnega mesta, in objave pripadajo temu, kategorije pa pripadajo blogu, ne objave.

Iz istega primera je jasno, da je pomembno upoštevati zaporedje pravil. Če bi zamenjal vrstici, bi bila vrstica RewriteRule ^post/(..info/blog/post/category/seo spredaj in ne tako, kot bi morala na https://site/blog/category/seo.

In zadnji primer je analiza pogoste napake z naslovom iz korena strežnika

Na primer, odločili ste se odpraviti težavo, ko je stran kategorije na voljo na dveh naslovih http://site.ru/razdel/podrazdel/index.php in http://site.ru/razdel/podrazdel/. Drugi url je pravilen in glavni, url z index.php na koncu pa je popoln dvojnik, ki se ga je treba znebiti.

Za preusmeritev iz index.php v kategorijo napišete naslednje pravilo:

RewriteEngine na RewriteBase /

301 preusmeritev s strani na stran na nov naslov

Najenostavnejši primer je, ko morate eno stran preusmeriti na drug naslov. Če morate narediti preusmeritev za več strani, boste morali napisati več pravil, vendar je v tem primeru bolje uporabiti zgoraj opisane predloge. Obstaja več popolnoma enakih možnosti sintakse:

Preusmeri 301 /page-name1.html http://site.ru/page-name2.html Preusmeri trajno /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Preusmeri 301 /page-name1.html http://site.ru/page-name2.html Preusmeri trajno /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Izberite eno od treh, osebno pa imam raje prvo možnost - je krajša, preprostejša in bolj razumljiva. Mimogrede, tukaj site.ru morda ni nujno ista domena, ampak katera koli druga.

Končajmo z .htaccess in preidimo na PHP.

Trajna preusmeritev 301 z uporabo PHP

Običajno uporabim preusmeritev PHP, ko pride do težav z .htaccess ali se izkaže, da se funkcija PHP izkaže za bolj logično in razumljivo.

Sintaksa preusmeritve 301 v php izgleda takole:

glava(); header("Lokacija: http://site.ru"); die("Preusmeri");

header("HTTP/1.1 301 premaknjeno trajno"); header("Lokacija: http://site.ru"); die("Preusmeri");

Te vrstice sporočajo odjemalčevemu brskalniku, da je treba trajno preusmeriti z neke zahtevane strani na naslov http://site.ru. V tem primeru http://site.ru ni lahko le naslov glavne strani trenutnega mesta, ampak je lahko tudi katero koli drugo mesto. Če je šlo kaj narobe in je prišlo do napake, bomo v oknu brskalnika videli napis »Preusmeri«.

Da bi bilo bolj jasno, je tukaj nekaj primerov funkcij, ki sem jih napisal za svoj spletni dnevnik in poskušal rešiti določene težave.

Funkcija, ki vam omogoča, da odstranite določen del URL-ja

if (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== false) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); glava ("HTTP/1.1 301 trajno premaknjena"); glava ("Lokacija: $real_page_url"); die("Preusmeri" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 trajno premaknjeno"); header("Lokacija: $real_page_url"); die("Preusmeri"); )

Enkrat sem imel problem, da se mi je v panelu webmasterja pojavil kup napak 404, naslovi teh strani so bili kot https://alaev..e. Od nekje v naslovu se je pojavil podvojen naslov spletnega mesta. Nato sem napisal funkcijo, ki preverja, ali URI (upoštevajte, ne URL, ampak URI) vsebuje vnos »http://site«, in če ga vsebuje, iz naslova izrežemo ta del in zapišemo rezultat na spremenljivko $real_page_url, nato pa izvedemo preusmeritev 301 na pravi naslov iz spremenljivke.

Funkcija, ki odstrani končno poševnico iz URL-ja

if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); header ("HTTP/1.0 301 Moved Permanently" ); header ( "Lokacija: $requested_url" ); die("Preusmeri" ); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 premaknjeno trajno"); header( "Lokacija: $requested_url"); die("Preusmeri"); )

Tukaj je najpreprostejša funkcija, ki preveri, ali ima zahtevani naslov strani na koncu poševnico, in če je, je poševnica odrezana in pride do preusmeritve 301 na naslov brez poševnice.

Obstaja veliko več možnosti, ki omogočajo izdajo ukaza za preusmeritev v različnih programskih jezikih, kot so ASP, Ruby on Rail itd., vendar teh jezikov ne poznam, zato ne bom pametoval in vas tukaj zavajal . Preusmeritve so možne tudi z uporabo meta refresh meta oznake, pa tudi preusmeritve na javascript – vendar je to usoda nepoštenih razvijalcev vrat, iskalniki pa teh preusmeritev ne razumejo, od strežnika prejmejo odgovor 200 OK. Zato teh možnosti ne obravnavamo.

Trajna preusmeritev 301 za strežnik nginx

Se spomnite, da sem pisal o zrcalu moje strani, dostopnem prek IP-ja? Posledično je bila težava rešena s preusmeritvijo, zapisano v konfiguracijski datoteki strežnika, ki se običajno nahaja tukaj /etc/nginx/nginx.conf. Tam so bile zapisane naslednje vrstice:

strežnik ( poslušaj 1.2.34.123:80 privzeto; ime_strežnika _; prepiši ^/(.*)$ http://site.ru/$1 trajno; )

strežnik ( poslušaj 1.2.34.123:80 privzeto; ime_strežnika _; prepiši ^/(.*)$ http://site.ru/$1 trajno; )

Tukaj piše, da če se do naslova IP dostopa prek vrat 80, je treba narediti trajno preusmeritev na site.ru.

Vendar mi tehnična podpora tega ni priporočila z besedami: »Pravilneje bi bilo konfigurirati HTTP strežnik tako, da preprosto prekine povezavo, če se do njega dostopa na naslovu, ki ni izrecno naveden v Konfiguracija strežnika HTTP je najbolj zanesljiva, preprosta, varna in najmanj zahtevna možnost za vire strežnika. Čez nekaj časa bodo strani, ki niso več dostopne, verjetno izločene iz indeksa iskalnika.«

Naslednji nasvet je bil ta: "Ko morate preprosto zapreti povezavo namesto preusmeritve, potem namesto vrstice navedite "rewrite ^/(.*)$ http://site.ru/$1 permanent;" taka vrstica "vrni 444;". Nato zaženite: "invoke-rc.d nginx reload"".

Mogoče bo to komu pomagalo.

Primeri preusmeritev v najpogostejših primerih

Preusmeritev za domeno www.site.ru na site.ru

strežnik ( poslušaj 80; ime_strežnika site.ru; prepiši ^ http://www.site.ru$request_uri? trajno; )

Preusmeritev z naslova http://site.ru/index.php na http://site.ru/

lokacija = /index.php (če ($request_uri = /index.php) ( prepiši ^ http://$host? trajno;#301 preusmeritev ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; vključite fastcgi_params; )

lokacija = /index.php (če ($request_uri = /index.php) ( prepiši ^ http://$host? trajno;#301 preusmeritev ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; vključite fastcgi_params; )

Nekaj ​​takega. Nisem dober pri nastavljanju konfiguracij za nginx; vedno se zadovoljim z nastavitvami Apache, tako da če imate kakršna koli vprašanja o nginxu, vam verjetno ne bom mogel pomagati ...

Kako preveriti glave HTTP in stanja odziva strežnika

V tem razdelku sem želel opisati različne storitve in vtičnike za preverjanje odziva strežnika, vendar razumem, da je ta objava že tako velika, da se bom moral omejiti le na povezave do razširitev za brskalniki Chrome in Firefox.

HttpFox dodatek za Firefox

HttpFox (tukaj je povezava do dodatka) je moje najljubše orodje za sledenje glav http. HttpFox prikazuje potek nalaganja strani vrstico za vrstico, kar vam omogoča sledenje na primer verigam preusmeritev in na splošno vrstnemu redu in hitrosti nalaganja strani. Če uporabljate Mozillo, jo vsekakor priporočam.

Razširitev glav HTTP za Chrome

Sam ne uporabljam razširitve HTTP Headers (tukaj je povezava do nje), vendar mi je internet svetoval, naj bom pozoren na to. Če imate boljše možnosti, jih objavite v komentarjih.

S tem zaključujem mojo strašno dolgo in dolgočasno objavo, prijatelji.
Hvala, ker ste prebrali do konca, upam, da vam je bilo res koristno.

Konfiguracijska datoteka .htaccess je konfiguracija za spletne strežnike Apache. Večina spletnih mest za gostovanje deluje prek tega strežnika, zato ima vsako spletno mesto to datoteko. Spletni skrbniki lahko z lastnimi spremembami delno nadzorujejo njegovo delovanje. V tem članku si bomo ogledali direktive in pravila, ki jih je mogoče spremeniti pri delovanju strežnika.

Najpomembnejša datoteka .htaccess se nahaja v korenu spletnega mesta:

Njegova dejanja veljajo za trenutni imenik in vse podimenike. Tisti. Lastniki spletnih mest imajo možnost vplivati ​​samo na delo svojega projekta, ne da bi posegali v delo celotnega strežnika. Če ta datoteka manjka, jo lahko ustvarite s katero koli beležko. Glavno je, da je ime datoteke ".htaccess" - brez formatov .txt, .doc itd.

301 preusmeritve se najpogosteje konfigurirajo na nivoju strežnika prek datoteke .htaccess, kar močno pohitri proces preklopa na nova stran, Ker ni potrebe po nalaganju vmesne strani. Določa tudi, katera datoteka obdeluje napako 404.

V nadaljevanju si bomo ogledali vse pogoste možnosti preusmeritev prek .htaccess, najprej pa se bomo seznanili z možnostmi in pravili.

Če želite delati s preusmeritvami, morate omogočiti modul ReWriteEngine. Če želite to narediti, morate napisati dve vrstici kode (po možnosti na samem vrhu datoteke .htaccess):

Možnosti +FollowSymLinks RewriteEngine Vklopljeno

Te vrstice postavite na sam vrh vaše datoteke .htaccess, da boste lahko delali z direktivami modula mod_write.

Prav tako morajo biti na gostovanju omogočeni moduli mod_alias (za podporo Redirect, RedirectPermanent in RedirectMatch).

1. Pravila Redirect, RewriteRule in RewriteCond 1.1. Direktiva preusmeritve

Sintaksa preusmeritve:

Preusmeri /from http://to_full_address

Preusmeritev nastavi neposredno preusmeritev z ene strani na drugo.

Koda za preusmeritev je zapisana v statusu. Je neobvezen parameter. Najpogosteje pišejo 301, kar pomeni trajno spremembo naslova strani.

Pomembno je, da je stran »od« zapisana v obliki brez navedbe celotnega naslova spletnega mesta, ampak navaja celoten relativni URL, ki se začne s poševnico »/« (tj. od korena spletnega mesta). Stran, kamor gre preusmeritev, mora biti napisana v celoti, tj. absolutni naslov strani URL (tj. z imenom domene in protokolom http ali https).

Na primer

Preusmeri 301 /oldpage.php http://site/newpage.php

Lahko tudi drugače zapišete

RedirectPermanent 301 /oldpage.php http://site/newpage.php ali Redirect Permanent 301 /oldpage.php http://site/newpage.php 1.2. Direktiva RewriteRule

Direktiva RewriteRule določa pravila prehoda. Sintaksa je naslednja:

Zamenjava vzorca RewriteRule [kode]
  • Ko pride do zunanje preusmeritve, se URL v vrstici brskalnika spremeni - " "
  • Z notranjim - ne spremeni URL-ja v vrstici brskalnika - " " ali "[L] "
1.3. Direktiva RewriteCond

Direktiva RewriteCond določa pogoje, pod katerimi se izvajajo pravila v RewriteRule.

RewriteCond Comparison_String Condition

Ti izrazi so lahko na primer uporabnikov brskalnik, naslov IP, naslov itd.

1.4. Direktiva RedirectMatch

Direktiva RedirectMatch je podobna Redirect, razlika je le v tem, da omogoča pisanje regularnih izrazov.

RedirectMatch From Where To 2. Primeri preusmeritev 301 v .htaccess

V člankih smo si ogledali že veliko primerov s preusmeritvijo .htaccess:

  • Sprememba naslova spletne strani - preusmeritev s stare domene na novo

Tukaj bomo dodali možnosti za preusmeritve, ki še niso obstajale.

2.1. Preusmerjanje z ene strani na drugo

Preusmeritev s site.ru/cat/oldpage na site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

Ali druga možnost:

Preusmeri 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Preusmeritev iz vseh datotek .htm v .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

Ali druga možnost:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Preusmerite celoten imenik na drugo stran

Vse strani v imeniku /old/ in podimenikih bodo preusmerjene na /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Odstranjevanje dodatnih poševnic iz URL-ja

Na primer, stran /katalog///stranica.html je dostopna in se odpre. Da bi se izognili tej situaciji in ne ustvarili neskončnega števila dvojnikov, bi morali napisati naslednjo preusmeritev

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule. %1/%2 2.5. Prepišite brez preusmeritve

Naložite lahko drugo stran, ne da bi spremenili URL strani. Naložimo na primer stran /news.html in naslovna vrstica bo prikazala naslov /news/happy

RewriteRule ^news/happy.* /news.html [L] 2.6. Dodajanje poševnice na koncu naslova domače strani

Na primer, veliko strežnikov deluje tako, da zadnja poševnica ni zapisana v URL-ju. Na primer http://site.ru. Spodnja koda rešuje to težavo: spletno mesto se bo odprlo na http://site.ru/

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Odstranjevanje imenika imenika iz URL-ja

Na primer, za preusmeritev s strani site.com/directoriya/stranica.html na site.com/stranica.html morate vnesti naslednje:

RewriteRule ^directoriya/(.+)$ http://site.com/$1

Ali druga možnost:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Preusmeri parametre GET

Na primer, preusmerite s strani /?act=page&id=2 na /page-2/

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Preusmeri na mobilna različica spletno mesto m.site.ru

V tem primeru najprej preverimo, ali je uporabnik spletno mesto odprl z Mobilna naprava(HTTP_USER_AGENT), potem se naslov spletnega mesta nadomesti z m.URL

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|brezžični|nokia|hand|mobi|telefon|cdm|upb|avdio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) RewriteRule ^$ http://m.%1 2.10. Preusmeritev s poddomene

Na primer, preusmerimo s katere koli strani poddomene poddomen.site.ru na glavno domeno site.ru

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Drugi primeri s htaccess 3.1. Zavrni naslov IP in brskalnik

Prepovedali bomo odpiranje spletnega mesta uporabniku, ki uporablja brskalnik IE z naslovom IP 172.111.222.55

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Zavrni določeno datoteko

Onemogočimo datoteko disable_file.html za vse:

zavrniti vse 3.3. Dovoli dostop z enega IP-ja

Dostop bo dovoljen samo z enega IP naslova 172.111.222.55

naročilo zavrni, dovoli zavrni vse dovoli od 172.111.222.55 3.4. Zavrni dostop z različnih IP-jev

Zavrni dostop do spletnega mesta z več naslovov IP 172.112.222.55, 172.113.222.55, 172.114.*.*

naročilo zavrni, dovoli zavrnitev vseh zavrnitev od 172.112.222.55 zavrnitev od 172.113.222.55 zavrnitev 172.114.*.* 3.5. Preusmeri URL z velikih znakov na majhne

Vse velike črke v URL-ju bodo pretvorjene v male črke.

RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.* )$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*) F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^ I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q( .*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T] *)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^( [^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y $2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %(ENV:HASCAPS) TRUE RewriteRule ^/?(.*) /$1

Dovolj pomembna točka pri postavitvi strani. Nepravilno nastavljena preusmeritev lahko zelo poškoduje rezultate iskanja spletnega mesta. Najpogostejše situacije, v katerih morate uporabiti trajno preusmeritev 301:

  • Spreminjanje naslova spletnega mesta - kupili ste svojo domeno in se odločili, da se premaknete s site.example.com na site.ru
  • Lepljenje ogledal - če je vaše spletno mesto na voljo na www.site.ru in site.ru, Iskalniki lahko to obravnavate kot dve različni strani, zato se morate najprej odločiti za glavno ogledalo (z www ali brez www) in nastaviti preusmeritve na glavno ogledalo.
  • Ko je stran (ena ali več) spremenila svoj naslov, je na neki točki postalo jasno, da naslovi http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 niso dobri in da so morali spremeniti v http://example.com/sport/news12, škoda pa izgubiti pozicije v indeksu iskalnika (saj bo to nov članek zanje).
  • Drug način za reševanje podvojenih strani

Pomembno: če je bila stran začasno premaknjena, uporabite 302 Moved Temporarily. V tem primeru strani ne bosta združeni in stran s preusmeritvijo je vedno mogoče obnoviti.

Trajna preusmeritev 301 za apache (.htaccess)

Pravila morate vstaviti takoj za vrsticami:

RewriteEngine Na RewriteBase / # za skrajšanje celotne poti od korena strežnika do korena mesta

pravila so podana z uporabo regularnih izrazov; spomnite se sintakse:

  • Metaznaki za določanje skupin znakov ali "oznak" v vzorcu:
    • ^ - oznaka začetka vrstice,
    • $ - oznaka za konec vrstice,
    • ! - zanikanje,
    • \ - ubežna poševnica, vam omogoča, da metaznak, ki mu sledi, obravnavate kot običajni znak,
    • . - pika, označuje poljuben znak, vendar le enega,
    • () - združevanje.
  • Modifikatorji so postavljeni za običajnimi znaki, metaznaki ali njihovimi skupinami:
    • ? - simbol se ponovi 0 ali 1-krat,
    • * - ponovljeno od 0 do 65536-krat,
    • + - ponovljeno od 1 do 65536-krat.
  • Zastavice določajo dodatne možnosti za to pravilo:
    • NC - (nocase) onemogoči preverjanje velikih in malih črk.
    • R - (preusmeritev) ustavi proces pretvorbe in vrne rezultat brskalniku odjemalca kot preusmeritev na to stran (302, PREMAKNJENO ZAČASNO).
      S to zastavico lahko podate drugačno kodo rezultata, na primer R=301 bo vrnilo preusmeritev s kodo 301 (TRAJNO PREMAKNJENO). Kot razumete, je to točno tisto, kar potrebujemo.
    • L - (zadnji) ustavi postopek pretvorbe in trenutna povezava se šteje za končno.

Razmislite o najpogostejših situacijah:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond označuje pogoj, ki bo, če se ujema, izvršil pravilo RewriteRule. Preusmeri iz index.php (html) na glavno stran RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Preusmeritev pri spreminjanju strukture mesta RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Trajna preusmeritev 301 v PHP

Če želite obvestiti brskalnik, da mora biti stran, ki jo je zahteval, preusmerjena na http://site.ru, zaženite naslednje ukaze:

Glava ("HTTP/1.1 301 premaknjeno trajno"); header("Lokacija: http://site.ru"); izhod();

Trajna preusmeritev 301 za nginx

Pravila preusmeritve so opisana v razdelku strežnika.

Preusmeri iz www.site.ru na strežnik site.ru (poslušaj 80; ime_strežnika www.site.ru; prepiši ^ http://site.ru$request_uri? trajno; )

oz splošno pravilo za vse strani:

Strežnik ( ime_strežnika ~^(?! www\.); prepiši ^ http://www.$host$request_uri trajno; )

Preusmeritev s strežnika site.ru na www.site.ru (poslušaj 80; ime_strežnika site.ru; prepiši ^ http://www.site.ru$request_uri? trajno; ) Preusmeri iz index.php na lokacijo glavne strani = / index.php ( if ($request_uri = /index.php) ( rewrite ^ http://$host? permanent;#301 redirect ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $ fastcgi_script_name; vključite fastcgi_params; )

Statusna koda HTTP s statusom 301 Trajno premaknjeno pomeni, da je bil zahtevani dokument trajno premaknjen na novi URI, naveden v polju Location v glavi.

Čemu služi?

Najprej, ko spremenite ime domene spletnega mesta, morate iskalnike obvestiti o spremembi naslova spletnega mesta. Drugič, združiti ime spletnega mesta z in brez www. Tretjič, za hiter prenos Page Rank na novo spletno mesto.

PHP

Prva metoda

Druga metoda

Perl

Prva metoda

$cgi = nov CGI; print $cgi->redirect("http://www.example.com/");

Druga metoda

#!/usr/bin/perl -w use strict; print "Stanje: 301 trajno premaknjeno\n"; print "Lokacija: http://www.example.com/\n\n"; izhod;

ASP.NET

Prva metoda

private void Page_Load(object sender, System.EventArgs e) ( Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.example.com"); )

Druga metoda (od različice 4.0)

RedirectPermanent("http://www.example.com");

ASP Ruby on Rails def do_something headers["Status"] = "301 Moved Permanently" redirect_to "http://www.example.com/" end ColdFusion Java (JSP) Apache Web Server (.htaccess)

Prva metoda (mod_alias, preusmeritev)

Preusmeri 301 / http://www.example.com

Druga metoda (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Tretja metoda (mod_alias, Trajna preusmeritev)

Trajna preusmeritev / http://www.example.com

Četrta metoda (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Peta metoda (mod_rewrite)

Možnosti +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Vrh