Kaip ištaisyti 404 klaidas po svetainės ar programėlės diegimo
Jei jūsų programėlė veikia lokaliai, bet puslapiai po diegimo grąžina 404, dažniausia priežastis – trūkstamas vienos puslapio programėlės (SPA) maršrutizavimas: serveris ieško failo, pavadinto /dashboard, kurio nėra, nes šis maršrutas egzistuoja tik JavaScript kode. Pataisymas – atsarginė taisyklė, kuri programėlės maršrutams pateikia index.html. Kitos priežastys: kūrimo rezultate trūkstami failai, kelių raidžių dydis, galūnės brūkšnio skirtumai, neteisingas bazinis kelias ir API maršrutai, kurie niekada nebuvo įdiegti.
Pradėkite pastebėdami, kuris tiksliai URL rodo 404 ir kaip į jį patekote. Šablonas tiesiai nukreipia į priežastį.
1 žingsnis: raskite šabloną
| Ką matote | Labiausiai tikėtina priežastis | Eikite į |
|---|---|---|
| Pagrindinis puslapis veikia; nuorodos veikia; atnaujinus puslapį ar atidarius giluminę nuorodą gaunamas 404 | Nėra SPA atsarginio varianto | 2 žingsnis |
| Visi puslapiai rodo 404, įskaitant pagrindinį | Publikuojamas neteisingas aplankas arba kūrimas neįdiegtas | 3 žingsnis |
| Puslapiai įkeliami, bet paveikslėliai, šriftai ar skriptai rodo 404 | Failai trūksta kūrimo rezultate arba kelias neteisingas | 4 žingsnis |
Veikia su /about/, neveikia su /about (arba atvirkščiai) | Galūnės brūkšnio tvarkymas | 5 žingsnis |
/About neveikia, bet /about veikia | Serveris skiria raidžių dydį | 4 žingsnis |
Puslapis įkeliamas, bet duomenų užklausos į /api/... rodo 404 | API neįdiegtas arba neturi maršruto | 6 žingsnis |
| Seni URL iš ankstesnės svetainės rodo 404 | Trūksta nukreipimų | 7 žingsnis |
| Tik jūsų pasirinktame domene | DNS ar domeno sąranka | 8 žingsnis |
Norėdami pamatyti tikrąjį statuso kodą, atidarykite kūrėjo įrankius (dešiniuoju pelės klavišu → Inspect), eikite į Network skirtuką, atnaujinkite puslapį ir pažiūrėkite pirmosios užklausos statusą.
2 žingsnis: pridėkite SPA atsarginį variantą
Tai klasikinė problema. React, Vue ar Svelte vienos puslapio programėlėje serveris turi tik kelis tikrus failus: index.html ir kelis JavaScript bei CSS failus. Maršrutus, pavyzdžiui, /dashboard ar /projects/42, tvarko naršyklėje veikiantis maršrutizatorius.
- Paspaudus nuorodą veikia: maršrutizatorius pakeičia URL ir nupiešia naują puslapį, nieko neprašydamas serverio.
- Atnaujinus puslapį arba atidarius nuorodą tiesiogiai neveikia: naršyklė prašo serverio
/dashboard, serveris tokio failo neturi ir grąžina 404.
Pataisymas – taisyklė, kuri sako: jei užklausa neatitinka tikro failo, pateikti index.html su 200 statusu ir leisti maršrutizatoriui perimti valdymą. Kaip tai įdėti, priklauso nuo serverio (patikrinkite dabartinę serverio dokumentaciją, nes detalės keičiasi):
| Serveris | Tipinė atsarginio varianto taisyklė |
|---|---|
| Netlify | _redirects failas publikuojamame aplanke su /* /index.html 200 |
| Vercel | Perrašymas vercel.json faile iš visų kelių į /index.html (karkaso nustatymai dažnai tai tvarko patys) |
| Cloudflare Pages | Pagal numatytuosius nustatymus teikia SPA stiliaus atsarginį variantą, jei nėra viršutinio lygio 404.html |
| Nginx | try_files $uri $uri/ /index.html; bloke location / |
| Apache | Perrašymo taisyklė .htaccess faile, siunčianti ne failų užklausas į index.html |
| GitHub Pages | Serverio pusės perrašymų nėra; dažni apėjimo būdai – maišos maršrutizavimas arba 404.html, kuris nukreipia |
Įsitikinkite, kad taisyklė neperima tikrų failų: užklausos į /assets/app.js vis tiek turi grąžinti JavaScript failą. Jei jos grąžina index.html, gausite tuščią puslapį su klaida „Failed to load module script“. Žr. kaip ištaisyti tuščią baltą puslapį.
Taip pat suteikite maršrutizatoriui visas gaudantį maršrutą, kad URL, neatitinkantys jokio puslapio, rodytų draugišką pranešimą „Puslapis nerastas“, o ne tuštumą.
Jei negalite keisti serverio nustatymų, maišos maršrutizavimas (URL pavyzdžiui /#/dashboard) išvengia problemos, nes dalis po # niekada nesiunčiama serveriui. Tai apėjimo būdas, o ne pirmas pasirinkimas: URL atrodo prasčiau ir mažiau draugiški paieškos sistemoms.
Karkasai, kurie puslapius generuoja serveryje ar kūrimo metu (Next.js, Astro ir panašūs), paprastai turi tikrus failus ar serverio maršrutus kiekvienam puslapiui, todėl ši konkreti problema ten pasitaiko rečiau. Jų atitikmuo – puslapis, kuris nebuvo sugeneruotas kūrimo metu.
3 žingsnis: patikrinkite, kas iš tiesų įdiegta
Jei viskas rodo 404, serveris greičiausiai neteikia jūsų kurtos programėlės.
- Teisingas aplankas. Serveris turi publikuoti kūrimo rezultatą (dažnai
distVite,buildCreate React App,outstatiniam Next.js eksportui), o ne projekto šakninį katalogą. - Kūrimas įvyko. Perskaitykite diegimo žurnalą. Jei kūrimas nepavyko, serveris galbūt nieko neįdiegė arba įdiegė seną versiją.
index.htmlyra viršutiniame publikuojamo aplanko lygyje, o ne poaplankyje.- Bazinis kelias sutampa. Jei programėlė teikiama adresu
example.com/app/, ji turi būti sukurta su tuo pačiu baziniu keliu (Vitebase, React Routerbasename), kitaip kiekvienas maršrutas ir išteklius nepataiko.
4 žingsnis: ištaisykite trūkstamus failus ir neteisingus kelius
Kai puslapiai įkeliami, bet ištekliai rodo 404:
- Raidžių dydis. macOS ir Windows paprastai laiko
Logo.pngirlogo.pngtuo pačiu failu. Dauguma Linux serverių – ne. Padarykite, kad kiekviena nuoroda tiksliai atitiktų tikrą failo pavadinimą. - Failai už kūrimo ribų. Vite projekte
public/aplanko failai kopijuojami tiesiogiai ir nurodomi nuo šaknies (/logo.png). Kode importuojami failai supakuojami. Failas, esantis kitur projekte, gali visai nebūti įdiegtas. - Santykiniai keliai.
images/photo.jpgišsprendžiamas pagal dabartinį URL, todėl lūžta ties/blog/post-1. Naudokite/images/photo.jpg. - Įkelti failai, įrašyti į vietinį diską. Jei naudotojų įkėlimai buvo įrašyti į serverio aplanką, jie dings, kai bus įdiegta nauja versija. Naudokite tinkamą failų saugyklą.
5 žingsnis: vienodai tvarkykite galūnės brūkšnius
/about ir /about/ yra skirtingi URL. Serveriai skiriasi tuo, ar prideda, ar pašalina brūkšnį, o neatitikimas su jūsų nuorodomis ar maršrutizatoriumi gali sukelti 404 arba nukreipimų ciklus. Pasirinkite vieną stilių, padarykite nuorodas tokias pačias ir sukonfigūruokite serverį, kad kitą formą nukreiptų į ją. Nuoseklumas padeda ir paieškos sistemoms, kurios kitaip gali matyti dvi kiekvieno puslapio kopijas.
6 žingsnis: ištaisykite API maršrutus, kurie rodo 404
Jei puslapis įkeliamas, bet Network skirtuke matote /api/... užklausas, grąžinančias 404:
- Galinė dalis neįdiegta. Statinis serveris teikia tik failus; galinė dalis turi veikti kažkur kitur.
- Kelias produkcijoje maršrutizuojamas kitaip. Kūrimo metu tarpinis serveris galėjo perduoti
/apiatskiram serveriui. Produkcijoje serveriui reikia lygiavertio perrašymo arba priekinė dalis turi kreiptis į tikrą API adresą. - SPA atsarginis variantas pagavo užklausą. API užklausa, kuri grąžina
index.htmlsu 200 statusu, reiškia, kad atsarginė taisyklė per plati. Išskirkite iš jos/api/*.
Publikuotos programėlės užklausos į /api/orders grąžina 404, nors peržiūroje jos veikia. Patikrinkite, kaip /api maršrutizuojamas peržiūroje ir publikuotoje programėlėje, ir padarykite, kad publikuota priekinė dalis pasiektų galinę dalį tuo pačiu būdu.
7 žingsnis: nukreipkite senus URL
Jei persikėlėte iš kitos svetainės ar ją perstruktūravote, seni URL, kuriuos vis dar naudoja žmonės ir paieškos sistemos, rodys 404. Pridėkite 301 (nuolatinį) nukreipimą iš kiekvieno seno URL į jo naują vietą. Laikykite sąrašą ir po paleidimo patikrinkite pavyzdį. Mūsų vadove kaip perkelti WordPress svetainę aprašyta, kaip tokį sąrašą sudaryti.
8 žingsnis: patikrinkite domeną
Jei programėlė veikia serverio adresu, bet rodo 404 jūsų pasirinktame domene, domenas gali rodyti į neteisingą projektą arba serveris dar nepririšo domeno prie jūsų svetainės. Patikrinkite DNS įrašus ir serverio domeno nustatymus. Žr. kaip prijungti savo domeną.
Padarykite tikrą 404 puslapį naudingą
Kai kurie 404 yra teisingi: kažkas parašė URL klaidingai. Padarykite tą puslapį naudingą:
- Trumpas pranešimas ir nuoroda į pagrindinį puslapį bei svarbiausias sritis
- Paieškos laukas, jei svetainėje yra paieška
- Ta pati antraštė ir navigacija kaip ir kitose svetainės dalyse
Kur jūsų sąranka leidžia, grąžinkite tikrą 404 statusą puslapiams, kurių nėra. Pranešimas „nerasta“, grąžinamas su 200 statusu, paieškos sistemų vadinamas minkšta 404 klaida, ir jis gali eikvoti jų naršymo laiką bei supainioti indeksavimą.
Dažniausios klaidos
- Testavimas tik spaudinėjant. Visada tikrinkite įklijuodami giluminius URL į naują skirtuką ir atnaujindami puslapį.
- Atsarginis variantas, kuris gaudo viską. Ištekliai ir API maršrutai grąžina
index.html, o tai sukelia tuščius puslapius ir painias API klaidas. - Nesutampantys raidžių dydžiai, kurie lūžta tik serveryje.
- Šaltinio aplanko diegimas vietoj kūrimo rezultato.
- URL perstruktūravimas be nukreipimų. Kiekviena sena nuoroda tampa 404.
404 klaidos Mythex
Mythex publikuojate iš darbo srities, o statinės priekinės dalys diegiamos kaip statinės svetainės. Jei publikuotas puslapis rodo 404, nurodykite agentui tikslų URL, ar tai nutinka atnaujinus, ar paspaudus nuorodą, ką rodo Network skirtukas, ir paprašykite patikrinti maršrutizavimą. Po pataisymo publikuokite iš naujo, nes tiesioginė programėlė yra momentinė nuotrauka, kol ją iš naujo nepublikuojate. Jei neseniai pakeitėte projektą, o tiesioginė svetainė atrodo sena, publikuokite iš naujo ir atlikite priverstinį atnaujinimą. Jei kūrimas nepavyksta, publikavimo dialoge naudokite Fix with AI. Žr. dokumentacijos kaip publikuoti ir publikavimo problemų sprendimas, taip pat mūsų vadovą kaip ištaisyti DI sukurtą programėlę.
404 kontrolinis sąrašas
- Užfiksuota, kurie tiksliai URL rodo 404 ir ar paspaudus, atnaujinus, ar abiem atvejais
- SPA atsarginis variantas pateikia
index.htmlprogramėlės maršrutams su 200 statusu - Atsarginis variantas neapima tikrų failų ir
/api/* - Maršrutizatorius turi visas gaudantį maršrutą „nerasta“
- Publikuojamas kūrimo rezultato aplankas ir kūrimas pavyko
- Bazinis kelias sutampa su vieta, kur programėlė teikiama
- Failų pavadinimų raidžių dydis sutampa su kiekviena nuoroda
- Išteklių keliai prasideda
/ - Galūnės brūkšnio stilius nuoseklus
- API maršrutai įdiegti ir maršrutizuojami produkcijoje
- 301 nukreipimai senoms URL
- Giluminės nuorodos patikrintos įklijuojant jas į naują skirtuką
Klausimai
Kodėl atnaujinus puslapį mano React programėlėje gaunu 404?
Vienos puslapio programėlės maršrutai, pavyzdžiui, /dashboard, egzistuoja tik JavaScript kode. Nuoroda veikia, nes maršrutizatorius ją tvarko naršyklėje, bet atnaujinus puslapį serveris prašo /dashboard failo, kurio nėra. Pataisymas – atsarginė taisyklė, kuri programėlės maršrutams pateikia index.html.
Kaip pridėti SPA atsarginį variantą Netlify, Vercel ar Nginx?
Netlify įdėkite _redirects failą su eilute /* /index.html 200. Vercel vercel.json faile pridėkite perrašymą, kuris visus kelius nukreipia į /index.html. Nginx location bloke naudokite try_files $uri $uri/ /index.html;. Patikrinkite savo serverio dokumentaciją, nes taisyklės keičiasi.
Kodėl mano paveikslėliai ar failai po diegimo rodo 404?
Dažniausiai failo nėra kūrimo rezultate, kelio raidžių dydis neatitinka (serveriai dažnai skiria didžiąsias ir mažąsias raides, o jūsų nešiojamasis kompiuteris – ne), arba kelias yra santykinis, nors turėtų prasidėti brūkšniu.
Ar trūkstamas puslapis turėtų grąžinti tikrą 404 statusą?
Taip. Rodykite naudingą puslapį „nerasta“, bet su 404 statusu, kur jūsų sąranka tai leidžia. Paieškos sistemos laikosi pranešimo „nerasta“, grąžinto su 200 statusu, kaip minkštos 404 klaidos, o tai eikvoja indeksavimo laiką ir gali supainioti indeksavimą.