2008-08-16 31 views
5

Tôi thấy các URL thường xuyên (được viết lại) không có ID trong đó, như trên một số cài đặt wordpress. Cách tốt nhất để đạt được điều này là gì? Ví dụ: site.com/product/some-product-name/ Có thể để giữ mảng tên trang và ID trong bộ nhớ cache, để tránh truy vấn DB trên mọi yêu cầu trang? Cách tránh xung đột và các vấn đề khác khi sử dụng url không có ID là gì?URL không có ID

Trả lời

3

Sử dụng ID trình bày cùng một câu hỏi hóc búa, thực sự - bạn chỉ đang kiểm tra một giá trị khác trong cơ sở dữ liệu của mình. Phần "một số sản phẩm tên" của URL của bạn ở trên cũng là một điều gì đó độc đáo. Một số người gọi chúng là sên (Wordpress, cũng permalinks). Vì vậy, thay vì truy vấn cơ sở dữ liệu cho một hàng có ID cụ thể, bạn đang truy vấn cơ sở dữ liệu cho một hàng có một slug cụ thể. Bạn không cần phải biết ID để truy xuất hồ sơ.

1

Miễn là tên sản phẩm là duy nhất thì đó không phải là vấn đề. Sẽ không mất nhiều thời gian hơn nữa (ít nhất là không đáng kể) để tìm kiếm một sản phẩm theo tên duy nhất hơn ID số miễn là cột được lập chỉ mục.

+0

Vâng, nó sẽ mất nhiều thời gian hơn, nhưng nó vẫn đủ nhanh để không quan tâm. –

1

Wordpress có một trường trong bảng wp_posts cho slug. Khi bạn tạo bài đăng, nó tạo ra một slug từ tiêu đề bài viết (nếu đó là cách bạn đã cấu hình nó), thay thế dấu cách bằng dấu gạch ngang (hoặc tôi nghĩ bạn có thể đặt nó thành dấu gạch dưới). Nó cũng đưa ra các dấu nháy đơn, dấu phẩy hoặc không có gì. Tôi tin rằng nó cũng giới hạn chiều dài tổng thể của sên, quá.

Vì vậy, trong ngắn hạn, nó không tự động giải mã URL vào tiêu đề của bài đăng - có một trường trong bảng khớp với phiên bản URL của tên bài đăng trực tiếp.

1

Như bạn có thể biết hoặc không biết, các URL sẽ được viết lại với mô-đun mod_rewrite của Apache. Như đã đề cập ở đây, Wordpress là, trong nền, gán một slug sau khi khử trùng tiêu đề hoặc tên bài viết.

Nhưng, để trả lời câu hỏi của bạn, những gì bạn mô tả là tính năng "Permalinks" của Wordpress và bạn có thể tìm hiểu thêm về nó trong Wordpress codex. Các phiên bản mới hơn của Wordpress thực hiện việc ghi lại nội bộ (không có .htaccess editin, wp_rewrite thay thế). Đó là lý do tại sao bạn sẽ thấy cùng một ruleset cho bất kỳ cấu trúc permalink nào.

Mặc dù, nếu bạn thực hiện một số thao tác bạn có thể tìm thấy các quy tắc viết lại cũ. Ví dụ:

RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3 [QSA,L] 

sẽ mất một URL như /2008/01/01/ và chỉ đạo nó để /index.php?year=2008&monthnum=01&day=01 (và tải các nhóm ngày).

Nhưng, như đã đề cập, một trang như product-name tồn tại chỉ vì Wordpress đã vệ sinh tiêu đề bài đăng và lưu nó làm trường trong cơ sở dữ liệu.

Các vấn đề liên quan