Có vẻ chủ thớt thì hơi yếu việc hình dung cái hệ thống mình có những gì và hoạt động thế nào và mọi người cũng chưa hiểu đúng vấn đề của ông chủ thớt thì phải.
Theo mình đoán mò nhé, trước kia là bạn có site WP, bài sẽ dạng: domain.com/ten-bai-viet
giờ bạn làm CRS với ReactJS, host static files trên Google Cloud Storage, bạn không còn có server PHP, nodejs, nginx, apache... gì nữa. Tức là về cơ bản app của bạn này chỉ là index.html, JS, CSS, việc phân biệt /category-1/category-1-1/ten-bai-viet là bài nào nội dung sao là thực hiện ở client side (trên browser của user)
Như vậy, đầu tiên là bạn phải xem khi vào /category-1/category-1-1/ten-bai-viet hoặc vào domain.com/ten-bai-viet trong cái setup mới này (trực tiếp từ url hoặc refresh cái trên browser), xem nó có ra gì không, response có nội dung thế nào? Theo mình là không, vì sao, vì request này vào Google Cloud Storage nó ko tìm thấy cái file mà phải vào / hoặc là trực tiếp index.html nó mới serve cái index.html file ấy.
Vậy phải làm thế nào? Vì dùng cloud (google) và client side rendering nên ko có cách nào cả, chỉ có một cách "hack" là set error page thành index.html, tức là vô /category-1/category-1-1/ten-bai-viet hay vô /ten-bai-viet thì nó đều chỉ trả về index.html thay vì not found và có cái index html thì nó sẽ load tiếp js, css và nó dựa vào cái url /category-1/category-1-1/ten-bai-viet để render ra page tương ứng. Với kiểu hack này thì bạn xử lý vấn đề khá đơn giản, ở React Route làm cái map từ "ten-bai-viet" -> cái URL mới của bạn.
Nhưng như vậy có mấy cái củ chuối:
- Request thành công (render page bình thường) nhưng status code ra 404 hay 403....
- Phải expose cái map danh sách bài viết này ra client và thực hiện ở đó
Với việc dùng CSR và chỉ host static files trên cloud thì nó như vậy. Rất củ chuối, không phù hợp kiểu blog bài viết, cần SEO, mình cũng ko biết cách xử lý khác, nên thay vì map domain.com -> google cloud storage như vậy bạn có thể làm domain.com -> vô một cái server (Server/Nginx/Google App Engine/App gì đó) -> tuỳ theo request mà serve cái file index.html của react hay xử lý tiếp (như của các bạn trên đây gợi ý)