2012-04-19 3 views
1

저는 CI를 사용하여 블로그 사이트를 구축하고 있습니다. HMVC plugin을 사용하고 있습니다. 내가 작업하고있는 모듈은 "/ journal"이다.CodeIgniter + mod_rewrite URI 줄이기

각 기사는/journal/article/ID/SLUG에서 액세스됩니다. 이것은 잘 작동하지만 mod_rewrite를 사용하여 URI를/journal/ID/SLUG로 줄이고 싶습니다. 테스트를 위해

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^journal/([0-9]+)(.*)$ index.php?/journal/article/$1$2 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 

내가/저널/2를 사용하고 있습니다 : 여기

내 규칙입니다.

나는 규칙이 일치하는 것을 알고있다. 예를 들어 리디렉션을 http://google.com으로 변경하면 실제로 Google로 리디렉션됩니다. 그러나 작성된대로 규칙을 사용하면 무시되는 것처럼 보이며 입력 한 내용에 관계없이 404가 표시됩니다.

나는 명백한 (또는 은밀한) 오류가 있습니까?


편집 : 질문을 게시 한 직후에 알아 냈습니다. 내 규칙은 참으로 정확하지만 설정/config.php 파일에서 다음 줄을 변경해야

$config['uri_protocol'] = 'AUTO'; 

$config['uri_protocol'] = 'PATH_INFO'; 

나는 변화가 않습니다 정확히 알고 주장하지 않거나 이유를 문제를 해결합니다. 아마도 누군가가 설명을 따를 수 있습니다.

답변

1

$ config [ 'uri_protocol']는 앱 URI를 결정하는 데 사용할 $ _SERVER 수퍼 글로벌을 CI에게 알려줍니다. 'PATH_INFO'옵션은 호스트 요청이없는 $ _SERVER [ 'PATH_INFO']를 사용합니다 (php manual 참조).

'자동'옵션은 구성 조정없이 다른 환경에 적합하게 만드는 CI입니다.

필자는 개인적으로 몇 가지 PHP SEF 컨트롤러를 작성 했으므로 PHP 컨트롤러 스크립트를 사용하여 모든 처리를 수행하는 것이 좋습니다.

htaccess 및 재 작성은 까다 롭고 디버깅하기가 어려우며 한 번의 오타가 전체 사이트를 죽일 수 있습니다. 작은 성능 향상이있을 것이라고 확신하지만, 꽤 많은 요구가 필요할 것입니다. 어쨌든 index.php 컨트롤러로 향하고 있습니다. 내가 한 곳에서 모두 행복해지면 코드를 찾는다 ;-)

행운을 빈다. 그리고 잘하면 문제에 대한 통찰력을 제공했다.

+1

CodeIgniter 파일 (system/core/URI.php) 줄 87 function _fetch_uri_string()을 보면 AUTO 설정에 대한 논리를 볼 수 있습니다. 즉, 명령 행 (CLI) 호출을 점검하고 PATH_INFO, QUERY_STRING 등을 점검하여 원하는 URI를 판별합니다. AUTO 이외에 뭔가를 지정하는 경향이 있으므로 행동이 정확히 무엇인지 알 수 있습니다. – stellablue

관련 문제