저는 Apache 전문가가 아니므로 .htaccess에서 3,000 개의 리디렉션이 문제가되는지 여부를 말할 수는 없습니다. (하지만 내 생각에는 나쁜 생각 일 수 있습니다.) 그러나 문제에 대한 간단한 해결책으로 mod_rewrite을 사용하여 리디렉션을 수행하는 것이 좋습니다.
RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/$3/ [R=permanent]
이렇게하면 정규식을 사용하여 이전 URL과 일치시키고 새 URL을 다시 작성합니다. [R=permanent]
은 내부적으로 요청을 자동으로 다시 쓰지 않고 mod_rewrite가 새 URL로 301을 발행하도록 지시합니다.
예를 들어, 이전 URL에없는 URL에 게시물의 요일을 추가 한 것처럼 보입니다. 임의의 게시물이 작성된 날을 분명히하기 위해 정규 표현식을 사용할 수 없기 때문에이 방법이 효과가 없을 수 있습니다. URL에서 해당 날짜를 삭제할 수 있다면 가야합니다.
: 처음 질문을 읽었을 때 마지막 단락을 놓쳤습니다. ("새 URL에 날짜 변수를 추가했기 때문에 RedirectMatch를 사용할 수 없습니다.")이 경우 mod_rewrite의 RewriteMap을 사용하여 게시물의 날짜 구성 요소를 조회 할 수 있습니다.
- 정적 파일의 빠른 검색을 수행하기 위해 해시 맵을 사용
당신은 두 가지 옵션이 있습니다. 즉, 이전 URL은 모두 작동하지만 이전 URL 스키마를 사용하여 새 게시물에 액세스 할 수는 없습니다.
- 스크립트를 사용하여 하루를 잡으십시오.
옵션 중 하나에서
,라는 파일 posts.txt을 만들어 넣어 :
/yyyy/mm/pppp dd
을 ... yyyy는 게시물의 해 각 게시물에 대한 mm은 월, PPPP입니다 게시물 이름 (.html 제외).
이 완료
, 실행
이
$ httxt2dbm -i posts.txt -o posts.map
그런 다음 우리는 서버/가상 서버 설정에 추가 :. (경로가 파일 시스템 경로가 아닌 URL 참고)
RewriteMap postday dbm:/path/to/file/posts.map
RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/${postday:$1/$2/$3}/$3/ [R=permanent]
옵션 2에서 RewriteMap으로 pgm:/path/to/script/lookup.whatever
을 사용하십시오. 스크립트 사용에 대한 자세한 내용은 mod_rewrite documentation을 참조하십시오.
you should never redirect more than once 때문에 날짜를 조회 한 다음 최종 목적지로 리디렉션하는 스크립트로 리다이렉트하는 것보다 mod_rewrite에서 조회하는 것이 낫습니다. 301 또는 302를 발행하면 왕복 비용이 발생하므로 페이지로드 시간이 길어집니다.
404 페이지 -> JS를 통해 리디렉션. 그것은 예쁘고 작동합니다. – Warty
@ItzWarty : 나는 그것이 끔찍한 충고라고해야 할 것입니다. JS가 켜져 있고 검색 엔진 스파이더에서 전혀 작동하지 않는다는 것을 보장 할 수는 없습니다. 404가 표시되고 콘텐츠가 사라 졌다고 가정합니다. 항상 오류 코드를 사용하여 코드가 실제로 의미하는 바를 말하십시오. – josh3736