Apabila menggunakan aplikasi React ke S3 menggunakan React Router, laluan anak tidak diberikan dengan betul. Saya telah menyelesaikan 403 dan 404 ralat
P粉501007768
P粉501007768 2023-09-02 15:05:04
0
1
479

Mula-mula saya ingin menyatakan bahawa saya telah mengambil langkah penyelesaian masalah untuk menyelesaikan ralat 403 dan 404 yang biasanya dikaitkan dengan isu ini dalam urutan lain pada Stack Overflow. Ini termasuk menetapkan halaman ralat CloudFront untuk mengubah hala ke /index.html pada ralat 403 dan 404. Saya juga cuba menggunakan fungsi Lambda@Edge untuk menulis semula URL.

Masalah yang saya hadapi ialah apabila saya menavigasi ke direktori akar, halaman tindak balas saya (menggunakan penghala tindak balas) disampaikan dengan betul dari aws. Tetapi apabila saya cuba menavigasi terus ke sublaluan, tiada apa yang kelihatan. Walau bagaimanapun, apabila saya menyediakan versi pengeluaran yang sama pada mesin tempatan saya, tiada masalah.

Ini ialah pautan awam untuk rujukan

Sila ambil perhatian bahawa jika anda menavigasi terus ke pautan, tidak akan ada masalah. Walau bagaimanapun, jika anda menavigasi ke https://d1e06h60n3f04n.cloudfront.net/preview/assetId, tiada apa yang akan dipaparkan. Kod halaman pratonton adalah seperti berikut:

import React, { useEffect, useState } daripada 'react'; import { useParams } daripada 'react-router'; import { BlogPreview } daripada './BlogPreview'; antara muka eksport IBlogPostData { tajuk: rentetan; kandungan: rentetan; } fungsi eksport BlogPreviewForm() { console.log("Memuatkan borang pratonton blog"); var { postId } = useParams(); const [blogPostData, setBlogPostData] = useState({ tajuk: "", kandungan: "" }); useEffect(() => { fungsi tak segerak loadPost() { var fileContent = await fetch(`previews/${postId}`); setBlogPostData(menunggu fileContent.json()); } loadPost(); }, []); kembali ( 
Pratonton Blog
SERAH
); }

Halaman harus mendapatkan aset daripada assetId dan memuatkannya.

html indeks saya:

import ReactDOM daripada 'react-dom/client'; import './index.css'; import { AppRoutes } daripada './Routes'; import reportWebVitals daripada './reportWebVitals'; import { createBrowserRouter, RouterProvider } daripada 'react-router-dom'; laluan const = createBrowserRouter(AppRoutes); const root = ReactDOM.createRoot( document.getElementById('root') sebagai HTMLElement ); root.render(    ); reportWebVitals();

dan takrif laluan saya:

export const AppRoutes: RouteObject[] = [ { elemen: , laluan: '/', kanak-kanak: [{ laluan: 'pratonton', kanak-kanak: [{ laluan: '/preview/:postId', elemen:  }] }] } ]

Saya agak pasti ini ada kaitan dengan CloudFront dan S3 kerana ia berfungsi dengan baik secara tempatan, jadi saya tidak pasti menyiarkan kod yang berkaitan akan banyak membantu, itulah sebabnya saya memautkan ke URL.

Konfigurasi S3 untuk rujukan:

P粉501007768
P粉501007768

membalas semua (1)
P粉585541766

Pada satu ketika semasa menyelesaikan masalah, saya menetapkan pembolehubah halaman utama dalam package.json kepada "

Saya melihat dalam tetingkap pembangun penyemak imbas saya dan melihat bahawa semua fail dalam direktori statik yang terletak di akar baldi s3 telah menerima ralat 404. Ini berlaku kerana ia cuba mencipta laluan berbanding dengan URL yang saya muatkan: mis.https://d29uq6a9kfzg1q.cloudfront.net/preview/static/js/ main.3351ea6b.js

Dengan mengalih keluar halaman utama "." daripada package.json saya, ia menukar laluan yang merujuk direktori statik kepada laluan mutlak dalam fail index.html saya: contohnya ini menyelesaikan masalah.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!