2010-05-14 3 views
1

저는 codeigniter를 사용하고 있으며 내 포털을 좀 더 SEO 친화적으로 만들고 싶습니다. 포털의 모든 기사를 처리하는 컨트롤러 (기사)가 있습니다. URL은 다음과 같습니다몇 가지 정적 인 것을 제외한 모든 uri 호출을 하나의 컨트롤러로 리디렉션하는 방법은 무엇입니까?

example.com/articles/category-sub-category/article-name

나는 모든 호출을 처리하는 컨트롤러 액션을 숨기기 위해 내 index.php를 숨기기 모드 재 작성 모듈을 사용하여, 이그나이터 라우팅하고있다.

는 나도 기사를 숨기려는,하지만 난 그것을 숨길 경우, 모든 호출은 기사 컨트롤러로 이동, 그리고 내가 내 URL은 다음과 같이 원하기 때문에 내가 원하는 게 아니에요 :

example.com/category-sub-category/article-name

routes.php에서 regexp 라우팅 규칙을 사용해 보았습니다.하지만 올바르게 만들 방법이 없습니다. CI의 라우팅 기능을 사용

+1

그냥 나일지도 모르지만 나는이 "기사"가 무엇인지 전혀 모르고 왜 그것을 숨기고 싶습니까? 그리고 왜 당신은 아무것도 숨기고 싶습니다 –

+0

나는 내 사이트에 대한 아주 좋은 seo url을 원하기 때문에 그것을 숨기고 싶습니다. "articles"는 내 컨트롤러의 이름입니다. 나는 uri를 통해 그것을 부르는데, 왜냐하면 나는 첫 번째 예제에서와 같이 부르는 것이 최선의 선택이 아니라 다른 언어로 된 포털을 사용하고 있기 때문에 다른 카테고리를 사용하고 있기 때문에 모든 언어에서 더 나은 순위를 얻는다. 기사 액션 호출이 없습니다. (언어에 대한 나의 나쁜 명령에 대해 유감스럽게 생각한다) –

답변

0
RewriteCond %{REQUEST_URI} !^articles(?:/|$) 
RewriteCond %{REQUEST_URI} !^static1(?:/|$) 
RewriteCond %{REQUEST_URI} !^static2(?:/|$) 
... 
RewriteRule ^/(.*) /articles/$1 [QSA,NE] 
+0

이것은 좋은 방법이지만, 문제를 해결하는 codeigniter 방법은 아니다. 그것은 거의 같은 일입니다. 감사합니다! –

3

, 당신은

$route['category_one/:any'] = 'articles/category/category_one'; 
$route['category_two/:any'] = 'articles/category/category_two'; 
//.. and on and on until you've routed them all 

당신은이 것이 Articles 컨트롤러 또는 다른 당신의 category 방법을 가지고 .. 그래서 같은 모든 범주에 대한 경로를 설정해야 할 것 또한 각 카테고리에 대한 메소드를 만들어야하는데, 이는 손을 놓치게됩니다. 하지만, 당신은 아직도 당신의 컨트롤러에서 category 방법을 만드는 데 필요한 것

$route['articles/(:any)'] = 'articles/category/$1'; 

:

는 적어도 CodeIgniter를 사용하면 URL에 articles 부분을 유지하고 다음과 같이 그 일을 더 나을 것 .

+0

좋아, 지금 내가 어떻게하는지,하지만이 일을 위해 정적이 아닌 방법이 필요해. 나는 정규식 또는 다른 방식으로 theres를 확신한다. (문제는, 내가 어떻게하는지 모른다.)필자는 구문을 다음과 같이 시도했다 : $ route [ '# [^ articles]/: any #'] = "$ 1/$ 2"; 하지만 작동하지 않습니다 –

+0

왜 $ route [ '# [^ articles]/: any #'] = "$ 1/$ 2"; $ route [ 'articles/(: any)'] = "$ 1/$ 2"가 될 수 있도록 정규식 시작/중지가 필요 없습니다.()는 $ 1을 사용할 수 있지만 $ 2가 작동하지 않는 경우에만 일치하는 것을 의미합니다. –

2

오케이! 문제 해결됨!

나는 다음 사이트에, 내 문제에 대한 해결책을 발견했습니다 http://bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-short/

$route['^(?!account|about|showcase|etc).*'] = "articles/read/$0";

이 줄 내 기사 컨트롤러가 아닌 모든 컨트롤러 요청을 반환, 그래서 난에 원하는대로 내가 URL이 이 :

+0

축하해! 그러나 당신이 아는 바로는 여기에 멍청이가되는 것이 아니라 모든 요청은 기술적으로 컨트롤러 요청입니다. 기사 컨트롤러에 대해 account, about, showcase, etc 컨트롤러를 요청하지 않는 모든 것을 다시 라우팅합니다. – bschaeffer