레거시 자체 개발 포럼 소프트웨어를 디스코urse로 성공적으로 마이그레이션했습니다.
200만 건의 레코드를 24시간 동안 가져온 후, 영구 링크(permalinks)를 제외하고는 모든 것이 완벽하게 작동합니다.
디스코urse의 permalinks 데이터베이스 테이블에는 약 350,000개의 영구 링크가 있습니다. 이 링크들은 모두 소문자입니다. 예를 들어, "forum/t140842-s1/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html"와 같습니다.
불행히도 구글은 "/forum/t140842/8P-Hilfe-bei-1-8-tfsi-guter-Motor-oder-schlechter-Motor/"로 링크를 걸고 있으며, 저는 404 오류를 받고 있습니다.
다른 부분에 영향을 주지 않고, permalinks 테이블에서 조회하기 전에 요청 URL을 소문자로 변환하는 방법에 대한 힌트가 있을까요? 조회 전 이러한 변환은 표준 기능이지 않나요?
Permalink 정규화는 permalink가 매칭되기 전에 URL을 다시 작성하므로, 이를 사용하여 슬러그를 제거할 수 있습니다. 설정에 있는 설명이 이를 설명하지만, 이미 이해하고 있는 경우에만 유용할 수 있습니다.
기존 토픽 ID는 topicCustomField에 있어야 하므로, 해당 필드를 순회하면서 새로운 permalink를 생성할 수 있습니다. 그런 다음 기존 permalink를 삭제하면 됩니다. (원하는 permalink를 만들 수 있다는 확신이 들면 모두 삭제해도 됩니다.)
여기서 및 다른 가져오기(importer)에서 permalink와 정규화(normalization)를 검색하면 몇 가지 예시를 찾을 수 있습니다(grep -r 사용 가능). 더 많은 도움이 필요하고 예산이 있다면 다음 주에 도움을 드릴 수 있습니다.
정규식 정규화를 더 시도해 보았지만, 그 작동 방식을 파악하지 못했습니다.
설명문에 있는 예제를 사용했을 때, 새 영구 링크(permalink)를 추가하면 URL 필드에서 다시 예상치 못한 결과가 발생했습니다.
Discourse로 마이그레이션할 때 도메인의 www 접두사를 제거했습니다.
이로 인해 기존 서버에서 Apache 설정과 .htaccess를 통해 URI를 소문자로 변환한 후 새 Discourse 서버로 리디렉션할 수 있는 기회가 생겼습니다. 이 방법으로 현재로서는 문제를 어느 정도 해결했습니다.
또는 forum/t140842-s2/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
또는 forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html
을 이전 토픽의 ID만 포함된 단순한 URL로 변환합니다: forum/t140842
이 작업은 REGEXP_REPLACE 함수를 통해 URL을 다시 작성하는 SQL 명령어로 수행됩니다:
INSERT INTO permalinks (created_at, updated_at, topic_id, url) SELECT NOW(), NOW(), topic_id, REGEXP_REPLACE(url,'forum/t(\d*)(-?.*)/(.*)','forum/t\1','') url FROM permalinks WHERE topic_id > 0 ON CONFLICT DO NOTHING;
Google은 URL https://old-domain.com/forum/t140842/8p-hilfe-bei-1-8-tfsi-guter-motor-oder-schlechter-motor.html을 인덱싱하고 링크하고 있습니다. 다른 도메인 때문에 이 요청이 Apache 서버로 끝나는 것이 행운이었습니다. 덕분에 .htaccess를 사용하여 쉽게 다시 쓸 수 있었습니다. 그래서 이 요청을 https://discourse-domain.com/forum/t140842로 다시 쓰고 있습니다. Permalinks 테이블에서는 위에서 설명한 정규식(위 참조)을 사용하여 전체 슬러그 URL이 포함된 이미 추가된 permalink를 활용하여 이 forum/t140842 레코드를 추가했습니다.