2012-08-30 2 views
1

다른 곳에서도이 질문이있을 수 있습니다. 그렇다면 사과드립니다. 성공하지 못한 채 1 시간 동안 검색 한 후에는 잘못된 길을 가고 있다고 생각하지만 도와 줄 수는 없습니다.CodeIgniter에서 설명 URL을 어떻게 적용 할 수 있습니까?

기본적으로 내가 찾고있는 것은 페이지의 URL에 설명이나 제목을 적용하는 방법입니다. 나는 CodeIgniter를 사용하기 때문에 예쁜 URL을 만드는 것이 아주 간단하다.

http://mysite.com/controller/function/what-ever-i-want/can-go-here 

을하고 항상로 이동합니다 :

내가 가질 수있는 변수 값을

http://mysite.com/controller/function/ 

what-ever-i-want 내가 URL이 될입니다 싶습니다 무엇 can-go-here

제어기/기능 만 주어진 경우 제목을 포함하도록 자동으로 다시 작성됩니다. 누군가가 가면

그래서 :

http://mysite.com/controller/function/ 

자동

http://mysite.com/controller/function/a-more-descriptive-title/ 

으로 나는 SO URL입니다에 대해 이야기하고있는 기능의 좋은 예를 URL을 다시 작성해야합니다. https://stackoverflow.com/questions/789439으로 가면 자동으로 https://stackoverflow.com/questions/789439/how-can-i-parse-descriptive-text-to-a-datetime-object

으로 변경됩니다.하지만 mod_rewrite가 관련되어 있다고 생각하지만, CodeIgniter와 가장 잘 어울리는 솔루션을 찾고 싶습니다.

나는 예쁜 URL 장면에 매우 익숙하며 필사적으로 더 많은 경험을 가진 사람의 조언을 구해야한다. 주어진 도움에 미리 감사드립니다!

답변

1

필자는 Stackoverflow에서이 작업을 수행하는 방법을 알아보기 위해 Fiddler2를 사용했습니다. 우리가 controller/function/에 갈 때 http://stackoverflow.com/questions/12205510/

HTTP/1.1 301 Moved Permanently 
Location: /questions/12205510/how-can-i-enforce-a-descriptive-url-with-codeigniter 
Vary: * 
Content-Length: 0 

에서 respnse의

일부는 그래서 기본적으로 우리는 controller/function/my-awesome-title로 사용자를 리디렉션해야합니다. _remap 기능이 기능을 다시 매핑하는 섹션 호출에 here을 찾을 수 있습니다 CodeIgniters에 대한

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Controller extends CI_Controller 
{ 
    protected $_remap_names = array(); 

    function __construct() 
    { 
     parent::__construct(); 

     $this->_remap_names['func'] = "My Awesome Title"; 
    } 

    function _remap($method, $arguments) 
    { 
     if(
      isset($this->_remap_names[$method]) 
      && sizeof($arguments) == 0 
      && method_exists($this, $method) 
      ) 
     { 

      $this->load->helper("url"); 

      $title = str_replace(" ", "-", $this->_remap_names[$method]); 
      $title = strtolower($title); 

      $url = strtolower(__CLASS__)."/$method/$title"; 
      $url = site_url($url); 

      // if you dont want to have index.php in url 
      $url = preg_replace("/index\.php\//", "", $url); 

      header("HTTP/1.1 301 Moved Permanently"); 
      header("Location: $url"); 
      header("Vary: *"); 
     } 
     else 
     { 
      call_user_func_array(array($this,$method), $arguments); 
     } 
    } 

    function func() 
    { 
     echo "<h1>"; 
     echo $this->_remap_names[__FUNCTION__]; 
     echo "</h1>"; 
    } 

}; 

문서 : 난 그냥 그 않는 간단한 컨트롤러를 작성했습니다.

+1

매우 철저한 답변을 해주셔서 감사합니다. 내 응용 프로그램과 함께 작동하도록 약간 수정할 수 있다고 생각합니다! – VictorKilo

1

저는 CodeIgniter를 사용하지 않지만 컨트롤러의 __construct에 코드를 넣을 수 있어야합니다. 또는 CI에 그러한 코드가있는 경우 어떤 종류의 사전 조치 이벤트에 코드를 넣을 수 있어야합니다.

보고있는 엔티티에 대한 적절한 URL을 조회하고 필요한 경우 301 리디렉션을 수행하면됩니다.

+0

와우, 실제로는 정말 간단합니다. 헤더 ("HTTP/1.1 301 Moved Permanently")와 헤더 ("Location : http://www.mysite.com/controller/function/title-to-page ");'추가 매개 변수가없는 경우 __construct() 내에서. 감사! – VictorKilo

관련 문제