Tôi đã nhận xét về another answer rằng vấn đề là khi giải quyết các mục, ứng dụng sẽ được thay thế ngược. Vì bạn có 2 thay thế cả ánh xạ thành "-" thì khi nó đến không thành công vì nó cố thay thế "-" bằng dấu cách ban đầu, nhưng một số dấu gạch nối đó phải gạch dưới nhưng không biết cái nào nên là cái nào.
Ví dụ: đường dẫn đã cho: /path to some/item_url
thì url được tạo là /path-to-some/item-url
.
Khi đến, các thay thế đảo ngược được trả lời và Sitecore hiện đang tìm kiếm /path to some/item url
, không tồn tại và do đó 404 được ném. Vì "_" (dấu gạch dưới) được thay thế bằng dấu "-" (dấu gạch ngang), khi đến "-" (dấu gạch ngang) được thay thế bằng dấu "" (dấu cách). Vì không có dấu gạch nối nào để thay thế nên nó không thể thay thế bằng dấu gạch dưới.
Hãy xem trong Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel
và bạn sẽ thấy một cuộc gọi đến MainUtil.DecodeName(args.Url.ItemPath)
nơi áp dụng EncodeNameReplacements.
Bạn nên sử dụng trình xử lý sự kiện để giải quyết vấn đề này ngay từ đầu, do đó bạn không cần phải lo lắng về bất kỳ loại ánh xạ nào.
Tôi đã viết một bài đăng trên blog về cách sử dụng Công cụ quy tắc để kiểm soát việc đặt tên mục hữu ích để kiểm soát các url: https://jammykam.wordpress.com/2015/07/13/seo-friendly-urls-in-sitecore- Phòng bệnh hơn chữa bệnh/ – jammykam