Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Last-Modified header, Symfony i ubrzanje indeksiranja pretraživanja. SEO mitovi: Sve o posljednjem modificiranom zaglavlju

Last-Modified header, Symfony i ubrzanje indeksiranja pretraživanja. SEO mitovi: Sve o posljednjem modificiranom zaglavlju

U ovom ćemo članku konfigurirati najvažnije zaglavlje odgovora poslužitelja - Last-Modified, zbog čega će se opterećenje poslužitelja smanjiti za 20-30%, a indeksiranje vaše stranice značajno će se ubrzati. Također ćemo naučiti vaš poslužitelj da izda grešku 304 kada robot za pretraživanje odnosi se na vaše web mjesto sa zaglavljem If-Modified-Since.

Zašto nam je potrebno zaglavlje Last-Modified?

Prije svega, želio bih razgovarati o značaju Zaglavlje Last-Modified. No, kako praksa pokazuje, uz svoj izniman značaj i nužnost, ovaj je naslov nekako sveopće zaboravljen i posve nepravedno podcijenjen. Ako ste pročitali preporuke tražilice, koji jasno i otvoreno govori o važnosti prijenosa Last-Modified u zaglavljima (datum zadnje promjene pojedine stranice), onda nećete sumnjati da se to mora učiniti i što prije to bolje. To se posebno odnosi na resurse s velikim i srednjim prometom, s redovito ažuriranim sadržajem. Ipak, statične stranice s 10 stranica mogu i bez toga ovu funkciju Neće imati nikakav negativan utjecaj niti vas ometati.

Zaglavlje Last-Modified sadrži GMT datum i vrijeme kada je stranica zadnji put izmijenjena. Svaka stranica ima svoj datum. Gotovo svaki od postojećih CMS-ova sada sprema datum kada su stranice ili postovi uređeni, a datum ažuriranja stranice također se mijenja kada je netko ostavio indeksirani komentar (sve ovisi o vašem specifične postavke). Ali iz nekog razloga ne sve moderni sustavi administracije omogućuju slanje istog datuma izmjene stranice kao zaglavlja i, štoviše, ne reagiraju ni na koji način na primljeni If-Modified-Since zaglavlje, ali o tome nešto kasnije.

Činjenica je da robot za pretraživanje može prilično često otići na web mjesto koje se redovito ažurira i skenirati njegove stranice po prioritetu, ponekad čak morate postaviti parametar Crawl-delay u robots.txt kako biste malo ublažili žar pretjerano aktivnih roboti preopterećuju nesretni poslužitelj, a ponekad Naprotiv, ljudi naporno rade mjesecima bez ikakvih rezultata, samo kako bi povećali učestalost posjeta robota za pretraživanje stranici. Ako takva stranica ne kaže alatu za indeksiranje kada su stranice posljednji put promijenjene i jesu li se uopće promijenile od zadnjeg posjeta, alat za indeksiranje će zauzvrat prolaziti kroz stranice iznova i iznova kao da su se promijenile, iako to može ne bude slučaj. A budući da je broj stranica učitanih u jednoj posjeti bota za pretraživanje ograničen, možda jednostavno neće doći do vaših novih članaka i otići kući, nakon što je potrošio ograničenje na starim stranicama koje uopće nisu ažurirane. Bez sumnje, prije ili kasnije skener će ipak doći do novih stranica, ali to će biti mnogo kasnije. Ovo treba zapamtiti kao aksiom, a tko ne vjeruje, neka pročita o zadnjim izmjenama na web stranici Yandex.

Isto se odnosi i na obične posjetitelje stranice, jer ako je vaš stari članak u lokalnoj predmemoriji, a poslužitelj ne šalje zaglavlje 304 Not Modified, tada će se učitavati iznova i iznova, svaki put od nule, povećavajući tako opterećenje na poslužitelj. Ako s vremena na vrijeme posljednji posjet neke stranice i dodavanja u predmemoriju, ništa se nije promijenilo, trebate da vaš poslužitelj pošalje zaglavlje 304 Not Modified u odgovoru i zaustavi daljnje generiranje stranice. Zašto svaki put učitavati stare stranice ako se na njima ništa nije promijenilo? Njihov sadržaj se može preuzeti iz predmemorije. Elementarno i učinkovito!

Odgovor poslužitelja na zaglavlje If-Modified-Since

Glatko smo pristupili drugom, ni manje ni više važna točka- reakcija vašeg poslužitelja na zaglavlje If-Modified-Since koje šalju botovi za pretraživanje. Oni to rade kako bi provjerili je li se vaša stranica promijenila od vašeg zadnjeg posjeta i zapravo prenose upravo to vrijeme u naslovu. Vaš poslužitelj tada mora odgovarati vremenu poslijednje ažuriranje stranicu kojoj je bot pristupio i vrijeme njegove posljednje posjete, koje vam govori. Ako se od tada na stranici nije pojavilo ništa novo, poslužitelj bi trebao odgovoriti zaglavljem 304 Not Modified i zaustaviti prijenos podataka napuštanjem izvršne skripte (u slučaju PHP-a, to je funkcija Izlaz). Nakon što primi odgovor 304, robot za pretraživanje će shvatiti da za sada nema više što raditi i otići će na sljedeća stranica, čime se štedi mnogo vremena.

Zahvaljujući tome, indeksiranje vaše stranice je znatno brže i također smanjuje nepotrebno opterećenje poslužitelja.

Želio bih dodati da smo u jednom od naših članaka ispitali još jedan zanimljiv način ubrzati indeksiranje stranice. Tamo smo posebno govorili o stranicama na WordPress motor i za to smo koristili posebne ping servere čije smo adrese dali i naznačili što treba učiniti s njima.

PHP funkcija

Dakle, prijeđimo odmah na stvar i pogledajmo funkciju koju su razvili naši stručnjaci i koja je uspješno testirana na nekoliko stranica:

Funkcija lastModified($gmdate) ( $IfModifiedSince = false; if (isset($_ENV["HTTP_IF_MODIFIED_SINCE"]) or isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) ( $IfModifiedSince = strtotime(substr(($_ENV["HTTP_IF_MODIFIED_SINCE) " "] ? $_ENV["HTTP_IF_MODIFIED_SINCE"]), 5)) if ($IfModifiedSince && $IfModifiedSince >= strtotime($gmdate)) ( zaglavlje($_SERVER["SERVER_PROTOCOL" ]." 304 Nije izmijenjeno");

Želio bih naglasiti da funkcija uzima GMT datum i vrijeme kao jedini argument - gmdate() , a ne datum(), molim te, nemoj se zbuniti. Argument koji funkcija prima je datum i vrijeme zadnje izmjene stranice. Gdje ćete ga dobiti ovisi o sustavu administracije, npr. u WordPressu ga možete dobiti ovako:

$WordpressPageLastModified = get_the_modified_date("r");

Što ako ne postoji sustav administracije i govorimo o o statičnoj web stranici, u kojoj se promjene unose ručno, izravno u kodu. U ovom slučaju također smo smislili rješenje za slanje datuma njegove posljednje promjene u zaglavlju:

$StaticPageLastModified = gmdate("D, d M Y H:i:s \G\M\T", filemtime($_SERVER["DOCUMENT_ROOT"]."/index.php"));

U u ovom slučaju koristimo funkciju vrijeme datoteke(), koji vraća vrijeme zadnjeg uređivanja datoteke u Unix formatu vremena.

Usput, ne preporučujemo da izmišljate ovaj datum iz glave, čak i ako je vaša stranica sve ovo vrijeme ostala statična. Ovaj trik neće dovesti do ničega dobrog, jer... tražilice će i dalje provjeravati je li se stranica stvarno promijenila i mogu vas kazniti jer ste ih doveli u zabludu.

Provjera odgovora poslužitelja

Na internetu postoji nekoliko servisa za provjeru odgovora poslužitelja, ali, kako se pokazalo, ne rade svi to ispravno i ne omogućuju vam svi praćenje ponašanja vašeg poslužitelja kao odgovor na poslani If-Modified- Od zaglavlja, ali moramo biti sigurni da poslužitelj šalje zaglavlje 304 Not Modified ako stranica nije ažurirana od zadnjeg posjeta.

Odgovor poslužitelja možete provjeriti na našoj web stranici, ali za najpotpuniju sliku ipak preporučujemo korištenje službene usluge Yandex. Tamo možete navesti sva potrebna zaglavlja, kao i odabrati fiktivno vrijeme zadnje posjete. Yandex će vam također omogućiti da odaberete vrstu bota za pretraživanje, ali da biste koristili ovaj alat morate dodati i potvrditi prava za upravljanje web mjestom u Yandex.Webmasteru, što bi, da budemo iskreni, uvijek trebalo učiniti prvo.

Zašto konfigurirati zaglavlje Last-Modified. Pokušajmo otkriti kako konfigurirati zaglavlje Last-Modified što je brže i jednostavnije moguće.

Za početak ću reći da je to potrebno prvenstveno kako bi se smanjilo opterećenje poslužitelja i ubrzalo indeksiranje stranica. Zbog toga je potrebno konfigurirati zaglavlje Last-Modified, posebno za velike resurse s veliki iznos stranice.

Svrha ovog zaglavlja je dati klijentu (pregledniku ili tražilici) informacije o najnovije promjene određenu stranicu. Klijent poslužitelju šalje zaglavlje If-Modified-Since. Ako se na stranici ne otkriju promjene, tada se s poslužitelja vraća zaglavlje "304 Not Modified". Međutim, stranica se ne učitava.

Ako su napravljene promjene, to će se uzeti u obzir, a poslužitelj će vratiti zaglavlje "200 OK" (stranica će se učitati s ažuriranim sadržajem).

Ispravno postavljanje Last-Modified pruža sljedeće prednosti:

  • rezultati pretraživanja prikazuju datum zadnjeg ažuriranja sadržaja stranice;
  • Kada su u tražilici sortirane po datumu, stranice zauzimaju više pozicije;
  • Indeksiranje stranica je značajno ubrzano.
  • Zašto roboti brže indeksiraju stranice s konfiguracijom Last-Modified?

    Odgovor je jednostavan: ako je promijenjeno samo 20 stranica na stranici, tada robot ne treba indeksirati svih 500 u potrazi za novim sadržajem, budući da će Last-Modified označiti stranice s promjenama.

    Last-Modified je posebno važan za resurse s velikim brojem stranica, jer robot ima vremena da indeksira svaku stranicu. ograničena količina vrijeme, i možda neće imati vremena doći do potrebnih stranica.

    Kako postaviti Last-Modified

    Prvo morate provjeriti jeste li konfigurirali ovo zaglavlje. Da biste to učinili, možete koristiti usluge varvy.com, last-modified.com ili tools.seo-auditor.com.ru. Ako provjera pokaže odsutnost zaglavlja, trebali biste ga početi postavljati.

    Ako imate statičnu stranicu, tada za svaku stranicu trebate napisati kod koji vidite na ekranu:

    Nakon svake promjene sadržaja, ručno mijenjamo datum u kodu. A što se svaki put događa, pitate me? Da, ako je stranica statična.

    Ako je stranica dinamična, tada koristimo postavku u PHP-u. Često se susreće sljedeći kod:

    zaglavlje("Zadnja izmjena: " . datum('r',strtotime($post->post_modified)))

    Mora se dodati u header.php. Ali radit će samo za postove i stranice, a neće raditi na glavnoj stranici. Također nije važeća za taksonomije, arhive ili brojanje novih komentara.

    $LastModified_unix = 1294844676;

    $Last Modified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);

    $IfModifiedSince = netočno;

    if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))

    $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));

    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))

    $IfModifiedSince = strtotime(substr($_SERVER[‘HTTP_IF_MODIFIED_SINCE’], 5));

    Ako ($IfModifiedSince && $IfModifiedSince >= &LastModified_unix) (

    zaglavlje($_SERVER['SERVER_PROTOCOL'] . '304 Nije izmijenjeno');

    header('Zadnja izmjena: ' . $Posljednja izmjena);

    Također možete prilagoditi zaglavlje pisanjem dva retka u .htaccess datoteku:

    RewriteRule .* —

    RewriteRule .* —

    Ali u ovom slučaju morate provjeriti hoće li biti problema na strani hostinga.

    Kako ne biste pisali kodove, možete koristiti gotova rješenja za postavljanje Last-Modified. Na primjer, za CMS WordPress postoje dodaci Clearfy i Last Modified Timestamp. Postavljanje se može izvršiti pomoću dodatka WP Super Cache. Da biste to učinili, u naprednim postavkama aktivirajte stavku "Pogreška 304" (podrška za odgovore 304 onemogućena je prema zadanim postavkama jer se na nekim web-mjestima za hosting mogu pojaviti problemi). Drugi CMS-ovi također imaju svoje dodatke ili, u krajnjem slučaju, možete naručiti dodatak od programera.

    Treba imati na umu da postavka Last-Modified nije uvijek korisna (na primjer, kada svaka stranica ima "end-to-end" blok informacija s redovito mijenjajućim sadržajem istog sadržaja). U tom slučaju tražilice mogu prestati percipirati informacije kao nove i rjeđe će posjećivati ​​vašu stranicu.

    U drugim slučajevima, konfiguriranjem Last-Modified, dobivate:

    • ušteda prometa;
    • ubrzati web stranicu;
    • slijediti preporuke Google i Yandex tražilica, što značajno ubrzava indeksiranje i povećava vidljivost stranica u pretraživanju. To je osobito vidljivo na resursima s velikim brojem stranica.

    Mnogi programeri prilikom izrade web stranica zaborave na vrlo korisno zaglavlje Last-Modified, zahvaljujući kojem možete optimizirati učitavanje web stranica i olakšati rad robota za pretraživanje. Zatim ću pokušati popuniti ovu dosadnu prazninu.

    Čemu služi zaglavlje Last-Modified?

    Funkcija zaglavlja je, kao što možete pretpostaviti iz naziva, obavijestiti klijenta o datumu zadnje izmjene web dokumenta. Na temelju specifikacije RFC 2616, klijent može "pitati" web poslužitelj je li se stranica promijenila od određenog datuma slanjem poslužitelju zaglavlja "If-Modified-Since". Ako se stranica nije promijenila, poslužitelj vraća samo zaglavlje "304 Not Modified"; u suprotnom, poslužitelj vraća zaglavlje "200 OK" i tijelo stranice. Kao što vidite, postoji korist i za poslužitelja i za klijenta: preglednik neće učitavati stranicu iznova i iznova, a web poslužitelj će pružati manje podataka.

    Koje su stranice bolje indeksirane? Dinamično ili statično?

    Prije nekoliko godina, među SEO-ima se vodila rasprava o tome koje su stranice bolje indeksirane? Dinamički, napisan npr. u PHP-u, ili statički, bez upotrebe programskih jezika. Poznavanje zaglavlja Last-Modified može odgovoriti na ovo pitanje. Stvar je u tome što web poslužitelj sam obrađuje zaglavlje "If-Modified-Since" ako je datoteka statična. U slučaju dinamičkog generiranja stranice, sva odgovornost za odgovor pada na programski jezik i programera. A budući da programer često nije zainteresiran za ovo pitanje, zaglavlja se uopće ne daju.

    Kako zaglavlje Last-Modified ubrzava indeksiranje pretraživanja?

    Jednostavno je, kako je napisano u Yandex pomoći, "robot neće moći dobiti informacije o tome je li stranica stranice ažurirana od posljednjeg indeksiranja. A budući da je broj stranica koje robot prima sa stranice u jednom posjetu ograničen, promijenjene stranice će se rjeđe ponovno indeksirati.”

    Zamisliti. Postoji web stranica s 10 tisuća stranica. Stranica je napisana u PHP-u. Zaglavlje Last-Modified nije ispravno vraćeno. Robot za pretraživanje ne može dobiti informacije o tome je li stranica stranice ažurirana od zadnjeg indeksiranja. Što on radi? Indeksira sve stranice!!! I ne samo one koje su se promijenile.
    Sigurno! Mnoge web stranice koriste Sitemap. Ali Sitemap je preporuka, pomoć alatu za optimizaciju tražilice. Ne može biti zamjena za zaglavlje Last-Modified!

    Postavljanje i rukovanje zaglavljem Last-Modified u php-u

    Kako bi web poslužitelj proslijedio If-Modified-Since zaglavlje php-backendu, trebate ga obavijestiti o ovome!

    Za kombinaciju nginx + php to je ovako:

    lokacija ~ \.php$
    {

    if_modified_since isključeno;

    Fastcgi_pass fcgi;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /<путь >/web$fastcgi_script_name;

    fastcgi_pass_header Zadnja izmjena;
    uključi fastcgi_params;
    }

    Za kombinaciju apache + php, ovako

    #If-Modified-Since ( ako php nije instaliran kao cgi, komentirajte retke ispod)
    RewriteRule .* -
    RewriteRule .* -

    * Ovaj izvorni kod je istaknut Markerom izvornog koda.


    Ako php radi kao modul, onda ne morate ništa konfigurirati!

    Jednostavan php kod za rukovanje zahtjevom If-Modified-Since,

    $qtime = isset($_SERVER["HTTP_IF_MODIFIED_SINCE" ])? $_SERVER["HTTP_IF_MODIFIED_SINCE" ]:"" ;

    $modified = substr(gmdate("r" , $timestamp), 0, -5)."GMT" ;

    if ($hdr == $modified)
    {
    zaglavlje ("HTTP/1.1 304 nije izmijenjeno");
    zaglavlje("Zadnja izmjena: $modificirano");
    Izlaz();
    }
    zaglavlje("Zadnja izmjena: $modificirano");
    //renderirati

    * Ovaj izvorni kod je istaknut Markerom izvornog koda.

    Kako obraditi zahtjev If-Modified-Since u symfonyu?

    symfony već ima mehanizam za obradu zaglavlja. Sve što programer treba učiniti je proslijediti zaglavlje objektu sfWebResponse. Ako to navedete, okvir će sve učiniti sam.
    $datummark = vrijeme();
    $response->setHttpHeader("Zadnja izmjena" , $response->getDate($datestamp));

    * Ovaj izvorni kod je istaknut Markerom izvornog koda.


    Budući da stranica obično sadrži drugačiji sadržaj, napisao sam metodu koja postavlja najnovije od prenesenih zaglavlja!
    statička javna funkcija setLastModified($datestamp)
    {
    $odgovor = sfContext::getInstance()->getResponse();
    $request = sfContext::getInstance()->getRequest();

    if (is_array($datestamp))
    {
    rsort($datummark, SORT_NUMERIC);
    $datummark = $datummark;
    }

    if (!$response->hasHttpHeader("Last-Modified"))
    {
    $response->setHttpHeader("Zadnja izmjena" , $response->getDate($datestamp));
    }
    drugo
    {
    $origLastModified = strtotime($response->getHttpHeader("Last-Modified" ));
    if ($origLastModified< $datestamp)
    $response->setHttpHeader("Zadnja izmjena" , $response->getDate($datestamp));
    }
    }

    * Ovaj izvorni kod je istaknut Markerom izvornog koda.


    Vrlo je zgodno koristiti ako, na primjer, stranica sadrži zadnja 3 videa, zadnja 3 članka i još nešto. Učitavanjem svakog modela iz baze podataka, možemo pozvati metodu i na kraju dobiti zadnji datum izmjene u odgovoru.
    Za one koji su zainteresirani, kod za obradu zaglavlja nalazi se u klasi sfCacheFilter.class.php.

    Zaključno, želio bih reći da korištenje zaglavlja Last-Modified nije uvijek opravdano. Na primjer, ako na web-mjestu postoji 5 tisuća stranica i svaka sadrži isti blok sa sadržajem koji se često mijenja, korištenje zaglavlja bit će beskorisno! U ovom slučaju možete dati različita zaglavlja samo za klijente i robote za pretraživanje. Ali što se mene tiče, varanje robota ne vodi ničemu dobrom. Pa, ili uklonite ovaj blok;).

    Na stranici možete provjeriti ispravnu obradu zaglavlja

    Mnogo je različitih mitova koji lebde okolo u području optimizacije web stranica za tražilice (SEO). Neki od njih imaju temelj, neki su došli niotkuda. U ovom ćemo postu pogledati jedan od njih - korištenje zaglavlja odgovora last-Modified.

    Prije nekog vremena primili smo dokument pod naslovom “Ingate preporuke za web studije na promoviranim stranicama.” A jedna od “preporuka” bila je sljedeća:

    Nakon redizajna ili na novoj stranici koja se razvija, mora biti naznačen datum zadnje izmjene stranica stranice (Last Modified).

    Da biste dodali informacije o datumu zadnje izmjene stranica na PHP web mjesto, trebate umetnuti skriptu na sam početak izvornog koda svake stranice

    zaglavlje("Zadnja izmjena: " . datum("D, d M Y H:i:s", vrijeme()) . " GMT");
    ?>

    Upravo ta divlja besmislica, ta potpuna besmislica i iskreno ludi kod potaknuli su me da napišem ovu bilješku. Ovdje ću pokušati objasniti što je Last-Modified, zašto je potreban i kako ga preglednici i tražilice koriste.

    Što je zadnja izmjena

    Prilikom prijenosa informacija klijentu (preglednicima ili robotu za pretraživanje), web poslužitelj javlja dosta dodatnih podataka. Mogu se vidjeti u konzoli preglednika, na primjer:

    konfigurirajte poslužitelj za izdavanje ispravnih zaglavlja odgovora (na primjer, ako stranica ne postoji, izdajte pogrešku 404, a ako je primljen zahtjev If-Modified-Since, zatim izdajte kod 304 ako stranica nije promijenjena od datum naveden u zahtjevu).

    Također možete vidjeti da ako poslužitelj ni na koji način ne odgovori na uvjetni GET zahtjev, onda se on ne razlikuje od običnog zahtjeva. Odnosno, zaglavlje Last-Modified s trenutnim vremenom, a također je pogrešno oblikovano (pozdrav Integgate!) uopće nije potrebno!

    Dakle, je li Last-Modified potreban ili ne?

    Općenito potrebno. Ali važno je razumjeti da nije samo zaglavlje ono što igra nikakvu ulogu, već cijeli scenarij uvjetnog zahtjeva, koji stranica mora u potpunosti implementirati. U ovom slučaju dobit ćemo veliku brzinu indeksiranja web mjesta.

    Ali često je to vrlo teško implementirati u gotov CMS. To može zahtijevati prilično značajne promjene koda samog CMS-a.

    Iako se za brojne CMS-ove to može postići omogućavanjem predmemoriranja stranica. Ako CMS predmemorira stranice, stvarajući i poslužujući u biti statične datoteke, tada će sam web poslužitelj ispravno odgovoriti na uvjetne zahtjeve. Na primjer, u WordPressu se to može postići pomoću dodatka WP Super Cache:

    Provjerimo to na djelu. Omogućio sam ovaj dodatak, otvorio preglednik u anonimnom načinu rada i poslao dva zahtjeva za istu stranicu. Jasno se vidi da je drugi odgovor točan - 304 Not Modified:

    Umjesto zaključka

    Dakle, pozabavili smo se zaglavljem Last-Modified. Prvo, mora prenijeti informacije o datumu i vremenu kada je dokument stvarno izmijenjen. Drugo, odgovor poslužitelja na uvjetni zahtjev sa zaglavljem If-Modified-Since iznimno je važan.

    Manje slušajte SEO stručnjake koji ne znaju osnove funkcioniranja interneta.

    Značenje ako je izmijenjen od je da tražilica (na internetu pišu da to mogu i preglednici, nisam provjeravao) pri ulasku na stranicu čita naslov zadnja promjena(vrijeme zadnje izmjene dokumenta). Sljedeći put kada pristupite, tražilica šalje zapamćeni datum, zadatak stranice je provjeriti je li stranica ažurirana od prethodnog puta i, ako se datumi podudaraju, odgovoriti naslovom 304 Nije izmijenjeno i zaustavite izvršavanje skripte. Ova će zaglavlja povećati brzinu ponovnog indeksiranja stranice.

    Kako dodati naslov ako je od tada izmijenjen

    Ako vaša stranica već nema zaglavlje ako je izmijenjeno od, uredi datoteku:
    /inc/_func.php pronađi (~220+ linija)

    ) if(!getvars())( ... ) Dodajte ispod kako bi izgledalo ovako: ) if(!getvars())( ... )else( $a=array(); if(isset($a) [$g ->item(0).$g->item(1).$g->item(2)])) $t=time();//TIME;//kasnije else( $t= filemtime( $g->file); if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"])>=$t)( header("HTTP/1.1 304 Not Modified"); die( ) ) header("Last-Modified: ".gmdate("D, d M Y H:i:s \G\M\T",$t));

    Ako stranica ima dinamičke odjeljke: recenzije, katalog proizvoda itd. dodajte njihova imena u polje $a, možete ih uzeti iz adresne trake preglednika ili u odjeljku upravljačke ploče izbornika za uređivanje --> poveznica.

    $a=niz("recenzije"=>1); $a=niz("recenzije"=>1,"katalog"=>1);

    Kako provjeriti da 304 nije izmijenjen i je li izmijenjen od tada

    1) Možete provjeriti zaglavlja 304 not modified i if modified since pomoću usluge provjere odgovora poslužitelja u Yandex webmasteru https://webmaster.yandex.ru/server-response.xml. Označite kućicu "dodaj zaglavlje If-Modified-Since" i tamo stavite datum prije sat vremena, trebao bi dati šifru statusa https: "304 Not Modified". Zatim postavite datum na prije jedan dan - dobivamo statusni kod statusa https: "200 OK". Hura sve radi.
    Naravno, stranica za testiranje mora se promijeniti prije testiranja.


    2) Jednostavnija metoda https://last-modified.com/ru/if-modified-since.html. Umetnemo adresu i voila, tamo će sve biti napisano na ruskom, što je pronađeno i što nije pronađeno.

    304 nije modificirano nije pronađeno

    Naslov http ako je od tada promijenjen pronaći će se u svakom slučaju, ali status drugog može biti ovakav: 304 nije modificirano nije pronađeno, prema 2. metodi provjere, prema 1. metodi u Yandexu će jednostavno pokazati 200.
    Najvjerojatnije je problem u tome što se zaglavlja ne prenose kroz proxy poslužitelj nginx 304 zadnja izmjena ili Apache ne prenosi.

    Sada ne vidim takav problem, s Apacheom 2.2.27, ali za svaki slučaj, za kombinaciju Apache + php, to se može riješiti na dva načina ako php nije instaliran kao cgi:

    Htaccess na samom dnu dovodimo do forme: 1) Samo u php RewriteRule (.*) index.php?q=$1 2) Za sve datoteke RewriteRule (.*) index.php?q=$1 RewriteRule .* - # RewriteRule .* -

    304 nije izmijenjen nginx

    Ovdje je malo kompliciranije; da bi se zaglavlje prenijelo u pozadinu, morate mu reći o tome. Ako nginx radi kao proxy poslužitelj, prvo bih pokušao prijeći na HTTP 1.1 - proxy_http_version 1.1; Nginx komunicira s Apacheom koristeći 1.0 prema zadanim postavkama. Ali, na primjer, na jednom od svojih poslužitelja nisam to mogao postići u razumnom vremenu; proxy za statičku isporuku bio je modul za Nginx Admin sipanel (v4.8 Stable). Odlučio sam jednostavno ukloniti modul s prednje strane.

    Location / ( chunked_transfer_encoding off; proxy_http_version 1.1; proxy_pass https://localhost:9001; proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host:9001; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_ set_header Nadogradnja websocket; #?

    Ako govorimo o zasebnom poslužitelju za web mjesto, tada konfiguracije mogu biti različite:

    Location ~ \.php$ ( if_modified_since off; #Na web stranici nginx netko je napisao da je # ovo već onemogućeno za skripte, ova zastavica onemogućuje internu provjeru, pokušajte.. fastcgi_pass fcgi; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /path/ web $fastcgi_script_name; fastcgi_pass_header Zadnja izmjena;

    Trenutno nemam gdje eksperimentirati, pa šaljem dalje na Google i tražim:

    Proxy_set_header If-Modified-Since $http_if_modified_since; proxy_pass_header If-Modified-Since; fastcgi_param If-Modified-Since; podvlake_u_zaglavljima uključene; ignore_invalid_headers isključeno;

    Ako netko ima konfiguracije koje rade, neka piše pošta objavit ću ga.

    Najbolji članci na temu