v2.5.2
Giriş yap

React 404 sayfası Hk.

topr4k
308 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhabalar,

React ile bir proje geliştirme aşamasındayım. Sayfa linklemesi ve 404 sayfası için React Router Dom kullanıyorum.

Sorunum şu;

Kullanıcı (veya Botlar) 404 sayfasına düştüğünde HTTP Status olarak yine 200 dönüyor. Ben 404 dönmesini istiyorum.

Nasıl yapabilirim? Cevaplarınız için şimdiden teşekkürler

Cevap yaz
Cevaplar (1)
ebykdrms
782 gün önce

Sanırım şurada sizinle aynı soruyu sormuşlar.
https://stackoverflow.com/questions/36052604/how-to-let-react-router-respond-with-404-status-code

Doğru cevap olarak işaretlenmemiş ama şöyle bir çözüm önerilmiş:

<Route path="/" component={App}>

    <IndexRoute component={Home} />
    <Route path='post/' component={Post} />

    { /* Catch all route */ }
    <Route path="*" component={NotFound} status={404} />

</Route>

Yani 404 sayfanız için status parametresi gönderin diyor. Sonra da bir middleware yardımıyla status'u 404 olanları yakalamanızı öneriyor.

import { match } from 'react-router';
import getRoutes from './routes';
....
app.use((req, res) => {
    match(
        { history, routes: getRoutes(), location: req.originalUrl }, 
        (error, redirectLocation, renderProps) => {
            if (redirectLocation) {
                res.redirect(redirectLocation.pathname + redirectLocation.search);
            } 
            else if (error) {
                console.error('ROUTER ERROR:', error);
                res.status(500);
            } 
            else if (renderProps) {
                const is404 = renderProps.routes.find(r => r.status === 404) !== undefined;
            }
            if (is404) {
                res.status(404).send('Not found');
            } 
            else {
                // Go on and render the freaking component...
            }
        }
    );
});

Eğer siteniz sadece React ise, yani sunucu taraflı bir kontrol edilmeksizin single page application olarak çalışıyorsa zaten 404 dönemez sanıyorum çünkü zaten aslında tüm site tek seferde yüklenmiş oluyor. Yeni yeni sayfalara yeni yeni istekler atılmıyor. Haliyle istek olmayınca yanıt da olmuyor.
Yukarıdaki örnek, react projenizin expressjs üzerinde çalıştığını varsayarak yazılmış.
Eğer siz next.js üzerinde çalışıyorsanız bulamadığı sayfaya zaten 404 dönüyordur diye tahmin ediyorum. (pek bilmem next.js)