2013-07-30 4 views
3

저는 codeigniter가있는 웹 사이트를 구축하고 있습니다. 내 URL은 다음 형식을 따릅니다. http://www.mywebsite.com/123/name-of-the-record 여기서 id는. 123은 데이터베이스에 레코드를 조회하는 데 사용됩니다.Codeigniter로 SEO 친숙한 URL을 리디렉션 하시겠습니까?

마지막 URI 세그먼트는 SEO 친화적 인 용도로만 사용되며 다른 것으로 변경할 수 있습니다 (예 : http://www.mywebsite.com/123/i-can-write-anything-here

이 답변의 다음 내용 인 https://stackoverflow.com/a/1442130/864507에 이어 어떻게 URL의 모든 변형을 리디렉션하여 마지막 세그먼트에 올바른 텍스트를 표시 할 수 있습니까?

URL을 확인하면 컨트롤러에서 올바른 형식인지, 리디렉션해야합니까?

if($this->uri->rsegment(4, 0) !== $this->myModel->recordName) { 
    redirect($id.'/'.$this->myModel->recordName); 
} 

감사

--- 갱신 1은 ---

그냥 위의 방법에 문제가 있음을 발견했다. 때로는 URL 끝 부분에 여분의 세그먼트가 있습니다. http://www.mywebsite.com/123/name-of-the-record/urikey/urivalue -이 그

--- UPDATE2 ---

여기 내 최신 코드가 작동하지 않습니다. 이것은 ID가 제공되면 추가 세그먼트를 무시하고 작동합니다. 이것이 올바른/최선의 방법인지 확인하기 위해 누군가를 기다리는 것이 좋습니다!

+0

올바른 URL 슬러그 (recordName)를 데이터베이스에 이미 저장 한 경우 ID 대신 데이터를 조회하는 것이 좋습니다. ID를 제거하여 URL을 더 깔끔하게 만들 수 있으며 중복 된 내용에 문제가 없을 것입니다. – Jeemusu

+0

감사합니다. Jeemusu - 내 레코드 이름에 특수 문자가 많이있어서 CI의 url_title을 사용하여 인코딩하는 데 문제가 있습니다. 그 후 특수 문자를 제거하기 때문에 디코드 할 방법이 없습니다. urlencode를 사용할 수는 있지만 예를 들어 % 21 % 40 % 23 % 40 % 40 % 21 – fxfuture

+0

과 같은 불쾌한 URL이있을 수 있습니다. 여분의 세그먼트와 함께 작동하지 않는 이유는 무엇입니까? '$ this-> uri-> rsegment (n)'을 사용하여 url을 검색하는 경우 세그먼트 n + 1 n + 2 (urikey, urivalue)가 아닌 세그먼트 n (레코드 이름) 만 반환해야합니까? – Jeemusu

답변

0

$ this-> uri-> segment (#)를 사용하지 않는 이유는 무엇입니까? 여기서 #는 세그먼트 번호입니다. 이것은 아직 우리를 실패하지 않았습니다. 또한 rsegment (s)가 버그가있을 수 있음을 암시하는 몇 가지 참조를 발견했습니다.

관련 문제