문제

일부 WordPress 설치에서와 같이 ID가 없는 (재작성된) URL을 자주 봅니다.이것을 달성하는 가장 좋은 방법은 무엇입니까?예:site.com/product/some-product-name/ 캐시에 페이지 이름과 ID를 배열로 유지하여 모든 페이지 요청에서 DB 쿼리를 피할 수 있습니까?충돌을 피하는 방법과 ID 없이 URL을 사용할 때 발생하는 다른 문제는 무엇입니까?

도움이 되었습니까?

해결책

ID를 사용하면 실제로 동일한 난제가 발생합니다. 즉, 데이터베이스에서 다른 값을 확인하는 것뿐입니다.위 URL의 "some-product-name" 부분도 독특합니다.어떤 사람들은 이를 슬러그(Wordpress, 영구 링크)라고 부릅니다.따라서 특정 ID가 있는 행에 대해 데이터베이스를 쿼리하는 대신 특정 슬러그가 있는 행에 대해 데이터베이스를 쿼리하게 됩니다.레코드를 검색하기 위해 ID를 알 필요는 없습니다.

다른 팁

제품 이름이 고유한 한 문제가 되지 않습니다.열이 색인화되어 있는 한 숫자 ID보다 고유한 이름으로 제품을 검색하는 데 더 이상 시간이 걸리지 않습니다(적어도 중요하지 않음).

Wordpress에는 wp_posts 테이블에 슬러그에 대한 필드가 있습니다.게시물을 생성하면 게시물 제목에서 슬러그가 생성되고(이렇게 구성한 경우) 공백이 대시로 대체됩니다(또는 밑줄로 설정할 수 있다고 생각합니다).또한 아포스트로피, 쉼표 등을 제거합니다.나는 그것이 또한 슬러그의 전체 길이를 제한한다고 믿습니다.

즉, URL을 게시물 제목으로 동적으로 디코딩하지 않습니다. 테이블에 게시물 이름의 URL 버전과 직접 일치하는 필드가 있습니다.

당신이 알 수도, 알지 못할 수도 있지만, URL은 Apache의 mod_rewrite 기준 치수.여기에서 언급했듯이 Wordpress는 백그라운드에서 제목이나 게시물 이름을 정리한 후 슬러그를 할당합니다.

그러나 귀하의 질문에 대답하기 위해 귀하가 설명하는 것은 Wordpress의 "Pretty Permalinks" 기능이며 이에 대한 자세한 내용은 다음에서 확인할 수 있습니다. 워드프레스 코덱스.최신 버전의 Wordpress는 내부적으로 다시 쓰기를 수행합니다(.htaccess editin 없음, wp_rewrite 대신에).이것이 바로 모든 고유링크 구조에 대해 동일한 규칙 세트를 볼 수 있는 이유입니다.

하지만 좀 더 자세히 살펴보면 이전 재작성 규칙을 찾을 수 있습니다.예를 들어:

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

다음과 같은 URL을 사용합니다. /2008/01/01/ 그리고 그것을 /index.php?year=2008&monthnum=01&day=01 (그리고 날짜 카테고리를 로드합니다).

하지만 언급했듯이 다음과 같은 페이지는 product-name 존재한다 오직 왜냐하면 Wordpress가 이미 게시물 제목을 삭제하고 데이터베이스에 필드로 저장했기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top