Hogyan javítsa a 404-es hibákat telepítés után
Ha az appja helyben működik, de telepítés után 404-et ad az oldal, a leggyakoribb ok a hiányzó egyoldalas app (SPA) útválasztás: a szerver a /dashboard nevű fájlt keresi, amely nem létezik, mert ez az útvonal csak a JavaScriptben van meg. A javítás egy fallback-szabály, amely az app útvonalaira az index.html-t szolgálja ki. Más okok: hiányzó fájlok a build kimenetében, kis- és nagybetűre érzékeny útvonalak, záró perjel különbségek, rossz base path, és olyan API-útvonalak, amelyek soha nem települtek.
Kezdje azzal, hogy pontosan feljegyzi, melyik URL ad 404-et és hogyan jutott el oda. A minta közvetlenül a okra mutat.
1. lépés: Keresse meg a mintát
| Amit lát | Valószínű ok | Lépés |
|---|---|---|
| A főoldal működik; a linkek működnek; frissítéskor vagy közvetlen mély linknél 404 | Hiányzó SPA-fallback | 2. lépés |
| Minden oldal 404, a főoldal is | Rossz mappa van közzétéve, vagy a build nem települt | 3. lépés |
| Az oldalak betöltődnek, de a képek, betűtípusok vagy szkriptek 404-et adnak | Hiányzó fájlok a buildből, vagy rossz útvonalak | 4. lépés |
/about/-tal működik, /about-tal nem (vagy fordítva) | Záró perjel kezelése | 5. lépés |
/About nem működik, de /about igen | Kis- és nagybetűre érzékeny szerver | 4. lépés |
Az oldal betöltődik, de az /api/... hívások 404-et adnak | Az API nincs telepítve vagy nincs útvonalra állítva | 6. lépés |
| A régi webhelyről származó régi URL-ek 404-et adnak | Hiányzó átirányítások | 7. lépés |
| Csak egyéni domainen | DNS vagy domainbeállítás | 8. lépés |
A valódi státuszkód megtekintéséhez nyissa meg a fejlesztői eszközöket (jobb klikk → Vizsgálat), menjen a Hálózat fülre, frissítsen, és nézze meg az első kérés státuszát.
2. lépés: Adja hozzá az SPA-fallbacket
Ez a klasszikus eset. Egy React-, Vue- vagy Svelte-alapú egyoldalas appban a szervernek csak néhány valódi fájlja van: index.html, néhány JavaScript- és CSS-fájl. Az olyan útvonalakat, mint a /dashboard vagy a /projects/42, a böngészőben futó router kezeli.
- Linkre kattintás működik: a router megváltoztatja az URL-t, és a böngészőben rajzolja ki az új oldalt, a szervert nem kérdezve.
- Frissítés vagy közvetlen megnyitás nem működik: a böngésző a szervertől a
/dashboard-ot kéri, a szervernek nincs ilyen fájlja, és 404-et ad.
A javítás egy szabály, amely azt mondja: ha a kérés nem egyezik egy valódi fájllal, szolgálja ki az index.html-t 200 státusszal, és hagyja, hogy a router átvegye. Hogy ez hogyan történik, a hosztól függ (ellenőrizze a hosztja aktuális dokumentációját, mert a részletek változnak):
| Host | Tipikus fallback-szabály |
|---|---|
| Netlify | Egy _redirects fájl a közzétett mappában, benne /* /index.html 200 |
| Vercel | Rewrite a vercel.json-ban, amely minden útvonalat /index.html-re küld (a keretrendszer-presetek gyakran kezelik ezt) |
| Cloudflare Pages | Alapértelmezetten SPA-stílusú fallbacket szolgál, ha nincs legfelső szintű 404.html |
| Nginx | try_files $uri $uri/ /index.html; a location / blokkban |
| Apache | Rewrite-szabály a .htaccess-ben, amely a nem fájl kéréseket az index.html-re irányítja |
| GitHub Pages | Nincs szerveroldali rewrite; gyakori megkerülés a hash-alapú útválasztás vagy egy átirányító 404.html |
Győződjön meg róla, hogy a szabály nem nyeli el a valódi fájlokat: a /assets/app.js kérésre továbbra is a JavaScript fájlt kell visszaadnia. Ha helyette index.html-t ad, üres oldalt és „Failed to load module script” hibát kap. Lásd: hogyan javítsa az üres fehér oldalt.
Adjon a routernek egy catch-all útvonalat is, hogy az oldalak nélküli URL-ek barátságos „Az oldal nem található” üzenetet mutassanak, és ne semmit.
Ha nem tudja módosítani a szerverbeállításokat, a hash-alapú útválasztás (/#/dashboard típusú URL-ek) elkerüli a problémát, mert a # utáni rész soha nem kerül a szerverre. Ez megkerülés, nem első választás: az URL-ek csúnyábbak, és kevésbé barátságosak a keresőmotoroknak.
Az olyan keretrendszerek, amelyek szerveroldalon renderelnek vagy build időben generálnak oldalakat (Next.js, Astro és hasonlók), általában valódi fájlokat vagy szerver-útvonalakat adnak minden oldalhoz, így itt ez a probléma ritkább. Az ő megfelelőjük az, ha egy oldal nem lett generálva build időben.
3. lépés: Ellenőrizze, mi lett valójában telepítve
Ha minden 404-et ad, a szerver valószínűleg nem a felépített appot szolgálja ki.
- A megfelelő mappa. A hostnak a build kimenetét kell közzétennie (Vite esetén általában
dist, Create React App eseténbuild, statikus Next.js exportnálout), nem a projekt gyökerét. - A build lefutott. Olvassa el a telepítési naplót. Ha a build hibázott, a host lehet, hogy semmit nem telepített, vagy egy régi verziót.
- Az
index.htmla közzétett mappa legfelső szintjén van, nem egy almappában. - A base path egyezik. Ha az app a
example.com/app/alatt fut, azzal a base-szel kell buildelni (Vitebase, React Routerbasename), különben minden útvonal és eszköz elvész.
4. lépés: Javítsa a hiányzó fájlokat és a rossz útvonalakat
Ha az oldalak betöltődnek, de az eszközök 404-et adnak:
- Kis- és nagybetű-érzékenység. A macOS és a Windows általában ugyanannak tekinti a
Logo.pngés alogo.pngfájlokat. A legtöbb Linux-szerver nem. Minden hivatkozás egyezzen pontosan a valódi fájlnévvel. - Fájlok a buildon kívül. Vitében a
public/mappa fájljai változatlanul másolódnak, és a gyökérről hivatkozhatók (/logo.png). A kódban importált fájlok bele vannak csomagolva. A projekt más helyén lévő fájl lehet, hogy egyáltalán nem települ. - Relatív útvonalak. Az
images/photo.jpgaz aktuális URL-hez képest oldódik fel, ezért a/blog/post-1oldalon eltörik. Használja a/images/photo.jpgformát. - Helyi lemezre mentett feltöltések. Ha a felhasználói feltöltések a szerver saját mappájába kerültek, eltűnnek, amikor új verzió települ. Használjon megfelelő fájltárolást.
5. lépés: Kezelje egységesen a záró perjeleket
A /about és a /about/ különböző URL-ek. A hosztok eltérően kezelik, hogy hozzáadnak vagy eltávolítanak-e perjelet, és ha ez nem egyezik a linkjeivel vagy a routerrel, 404-et vagy átirányítási hurkot kaphat. Válasszon egy stílust, használja a linkjeiben, és állítsa be a hostot, hogy a másik formát erre irányítsa át. A következetesség a keresőmotoroknak is segít, amelyek egyébként minden oldalból két példányt látnának.
6. lépés: Javítsa a 404-et adó API-útvonalakat
Ha az oldal betöltődik, de a Hálózat fülön a /api/... kérések 404-et adnak:
- A back end nincs telepítve. Egy statikus host csak fájlokat szolgál ki; a back endnek valahol futnia kell.
- Az útvonal élesben másképp van irányítva. Fejlesztés közben egy proxy átirányíthatta az
/api-t egy külön szerverre. Élesben a hostnak ekvivalens rewrite-ra van szüksége, vagy a front endnek az API valódi címét kell hívnia. - Az SPA-fallback elkapta. Ha egy API-kérés 200 státusszal
index.html-t ad vissza, a fallback-szabály túl széles. Zárja ki belőle a/api/*útvonalakat.
A közzétett app
/api/orderskérései 404-et adnak, de az előnézetben működnek. Ellenőrizze, hogyan van az/apiútvonalazva az előnézetben és a közzétett appban, és állítsa be, hogy a közzétett front end ugyanúgy érje el a back endet.
7. lépés: Irányítsa át a régi URL-eket
Ha másik webhelyről költözött, vagy átszervezte az URL-eket, a régi címek, amelyeket az emberek és a keresőmotorok még használnak, 404-et adnak. Adjon hozzá egy 301 (állandó) átirányítást minden régi URL-ből az új helyére. Vezessen listát, és indítás után mintavétellel teszteljen. A WordPress-oldal költöztetéséről szóló útmutatóban a lista összeállítását is leírjuk.
8. lépés: Ellenőrizze a domaint
Ha az app a host címén működik, de az egyéni domainen 404-et ad, lehet, hogy a domain rossz projektre mutat, vagy a host még nem csatolta a domaint a webhelyéhez. Ellenőrizze a DNS-rekordokat és a host domainbeállításait. Lásd: hogyan csatlakoztasson egyéni domaint.
Tegye hasznossá a valódi 404-es oldalát
Néhány 404 helyes: valaki elgépelte az URL-t. Tegye hasznossá ezt az oldalt:
- Rövid üzenet és linkek a főoldalra és a fontos szakaszokra
- Keresőmező, ha van keresés az oldalon
- Ugyanaz a fejléc és navigáció, mint a webhely többi részén
Ahol a beállítás engedi, adjon valódi 404-es státuszt a nem létező oldalakhoz. A 200 státusszal visszaadott „nem található” üzenetet a keresőmotorok soft 404-nek hívják, és pazarolhatja a feltérképezési idejüket, valamint összezavarhatja az indexelést.
Gyakori hibák
- Csak kattintással tesztelni. Mindig úgy teszteljen, hogy mély URL-eket illeszt be egy új lapra, és frissít.
- Mindent elkapó fallback. Az eszközök és az API-útvonalak
index.html-t adnak, ami üres oldalakat és zavaros API-hibákat okoz. - Eltérő kis- és nagybetűk, amelyek csak a szerveren törnek el.
- A forrásmappa telepítése a build kimenete helyett.
- URL-ek átszervezése átirányítások nélkül. Minden régi link 404 lesz.
404-ek a Mythexben
A Mythexben a munkaterületről publikál, és a statikus front endek statikus webhelyként települnek. Ha egy közzétett oldal 404-et ad, adja meg az ügynöknek a pontos URL-t, hogy frissítéskor vagy kattintáskor történik-e, és mit mutat a Hálózat fül, és kérje meg, hogy ellenőrizze az útválasztást. A javítás után publikáljon újra, mert az élő app pillanatkép, amíg újra nem publikál. Ha nemrég változtatott a projekten, és az élő oldal réginek tűnik, publikáljon újra és frissítsen erőteljesen. Ha a build hibázik, a közzétételi párbeszédablakban használja a Javítás AI-val gombot. Lásd: Hogyan publikáljon és Publikálási hibaelhárítás a dokumentációban, valamint az AI-val épített app hibakeresése útmutatónk.
404-ellenőrzőlista
- Pontosan feljegyezte, mely URL-ek adnak 404-et, és kattintásnál, frissítésnél vagy mindkettőnél
- Az SPA-fallback az app útvonalaira 200 státusszal az
index.html-t adja - A fallback kizárja a valódi fájlokat és a
/api/*útvonalakat - A routernek van catch-all „nem található” útvonala
- A build kimeneti mappája az, ami közzé van téve, és a build sikeres volt
- A base path egyezik azzal a címmel, ahol az app fut
- A fájlnevek kis- és nagybetűs írásmódja minden hivatkozásban egyezik
- Az eszköz-útvonalak
/-rel kezdődnek - A záró perjel-stílus következetes
- Az API-útvonalak telepítve és élesben útvonalazva vannak
- 301-es átirányítások a régi URL-ekhez
- A mély linkek tesztelve, beillesztve egy új lapra
Kérdések
Miért kapok 404-et, amikor frissítem az oldalt a React-appomban?
Egy egyoldalas appban az olyan útvonalak, mint a /dashboard, csak a JavaScriptben léteznek. A linkre kattintás működik, mert a router a böngészőben kezeli, de a frissítés olyan /dashboard fájlt kér a szervertől, amely nem létezik. A javítás egy fallback-szabály, amely az app útvonalaira az index.html-t adja vissza.
Hogyan adok SPA-fallbacket Netlify, Vercel vagy Nginx alatt?
Netlify alatt adjon hozzá egy _redirects fájlt ezzel a sorral: /* /index.html 200. Vercelen egy rewrite-ot a vercel.json fájlban, amely minden útvonalat az /index.html-re küld. Nginx alatt a location blokkban try_files $uri $uri/ /index.html; használható. Ellenőrizze a hosztja dokumentációját, mert a szabályok változnak.
Miért 404-esek a képeim vagy fájljaim telepítés után?
Általában a fájl nincs a build kimenetében, az útvonal kis- és nagybetűzése nem egyezik (a szerverek gyakran érzékenyek rá, ahol a laptopja nem), vagy az útvonal relatív, pedig perjellel kellene kezdődnie.
A hiányzó oldalnak valódi 404-es státuszt kell adnia?
Igen. Adjon segítőkész „nem található” oldalt, de 404-es státusszal, ahol a beállítás engedi. A keresőmotorok a 200 státusszal visszaadott „nem található” üzenetet soft 404-nek tekintik, ami pazarolja a feltérképezési időt, és összezavarhatja az indexelést.