2013-04-08 4 views
5

내가 모델의 일부 슬러그를 추가했지만 SEO의 나는 오래된 링크에서 301 리디렉션을 수행해야하기 때문에 : 세 :루비 301 리디렉션

http://host.com/foo/1 

새로운 :

http://host.com/foo/foo_slug 

질문 : 이 경우 301 리디렉션을 구현하는 방법은 무엇입니까? 및 대문자로 된 링크에서 301 리디렉션을 구현할 수 있습니까? 이처럼 :

http://host.com/foo/FOO_SLUG -> http://host.com/foo/foo_slug 

답변

13

당신은 당신의 컨트롤러 액션이 추가하여 상태 (301)로 리디렉션 할 수 있어야한다 :

redirect_to "http://host.com/foo/foo_slug", :status => 301 

자세한 것은 redirect_to의 API 문서를 참조하십시오.

대문자로 된 URL을 소문자 버전으로 리디렉션하는 데 아무런 문제가 없어야합니다.하지만 이는 Apache mod_rewrite 규칙과 같은 HTTP 서버 레이어에서 처리하는 것이 좋습니다. 301 리디렉션에 대한

+0

.. 또는 nginx config에 넣어서 루비 보간을 사용하십시오. 승객 nginx에 더 인기가있을 것 같다 – scones

+0

답변을 주셔서 감사합니다, 또한 레일 3 routes.rb에서 직접 301 리디렉션을 만들 수 있습니다, 그것은 컨트롤러 또는 노선에서 그것을 할 더 나은가? – xamenrax

+1

당신이 데이터베이스에서 슬러그를 보려고한다고 가정하기 때문에 당신이 컨트롤러 액션에서해야한다고 생각하십니까? 그렇다면 레코드를 검색하고 슬러그를 찾을 수있는 코드는'routes.rb'가 아닌 controller 액션에서만 발생할 수 있습니다. –

2

컨트롤러에이 코드를 작성 :

헤더 [ "상태"] =

redirect_to "http://host.com/foo/foo_slug"# 귀하의 경우

을에 그리고 두 번째 질문은 "301 영구적으로 이동" 하드 코드 URL을 언급 한 경우 대문자 또는 소문자를 사용하십시오.

그렇지 않으면 전체 URL을

+0

'Status' 헤더를 하드 코딩하는 대신': status => 301'을 전달하고 Rails가 그 헤더의 포맷을 처리하게하는 것입니다. (예를 들어 나의 대답을보십시오) –

+0

예, 이것이 또 다른 옵션입니다. 감사 –