Tôi sau các url chuẩn hóa/chuẩn hóa cho SPA với máy chủ ExpressJS.ExpressJS các url chuẩn hóa/chuẩn hóa
Mặc dù SPA được sao lưu bởi bộ định tuyến phía máy chủ - mẫu có thể khác một chút đối với url ứng dụng. Một trong những điểm khác biệt là thẻ <link rel="canonical" href="https://example.com{{ originalPath }}">
. Không phải chi tiết có liên quan nhưng giải thích ngữ cảnh của câu hỏi. Tôi hy vọng rằng sẽ chỉ có một URL phản hồi với 200, các biến thể của nó được chuyển hướng đến với 301/302 (hoạt động cho con người và công cụ tìm kiếm).
Tôi muốn làm cho url trở nên nhạy cảm và nghiêm ngặt (không có dấu gạch chéo), tương tự như các tùy chọn Router
, nhưng các url không chuẩn (khác biệt trong trường hợp hoặc dấu gạch chéo) nên chuyển hướng 301/302 sang url chuẩn thay vì 404.
Trong hầu hết các ứng dụng, tôi chỉ muốn buộc các url cho các tuyến đường có mức độ thấp hơn (ngoại trừ các truy vấn), không có dấu gạch chéo thêm. I E. app.all('*', ...)
và các chuyển hướng là:
/Foo/Bar/ -> /foo/bar
/foo/Bar?Baz -> /foo/bar?Baz
Nhưng có thể có ngoại lệ nếu các tuyến đường được xác định rõ ràng. Ví dụ, có những tuyến đường lạc đà-cased:
possiblyNestedRouter.route('/somePath')...
possiblyNestedRouter.route('/anotherPath/:Param')...
Và tất cả các url không kinh điển nên được chuyển hướng đến kinh điển (trường hợp tham số còn lại nguyên vẹn):
/somepath/ -> /somePath
/anotherpath/FOO -> /anotherPath/FOO
Logic đằng sau url kinh điển là khá đơn giản, vì vậy thật lạ khi tôi không thể tìm thấy bất cứ điều gì về chủ đề này liên quan đến ExpressJS.
Cách tốt nhất để làm điều này là gì? Có middlewares đã có thể giúp đỡ?
Nhưng còn những yêu cầu không được GET thì sao? Và những gì về các trường hợp nhạy cảm với chữ như 'somePath'? Chúng có thể được gắn kết các tuyến đường, tức là đoạn tuyến sẽ không là tuyến đầu tiên sau URL ban đầu '/' trong url. – estus
điều này sẽ nhận được tất cả các loại tuyến đường, tuy nhiên bạn chỉ có thể thực hiện chuyển hướng trên yêu cầu GET và bảo toàn tất cả nội dung. Nếu bạn muốn cố gắng thực hiện một số kết hợp thông minh hơn (sau khi chèn độ nhạy chữ hoa trên dòng 1), bạn có thể sử dụng app._router.stack để liệt kê tất cả các tuyến đường và cố gắng tìm phần chữ nhạy cảm –