1

우리는 현재 이전 CMS의 기사를 새 CMS로 마이그레이션하고 있습니다. 문제는 이전 기사의 링크가 하드 코딩되어 이전 사이트를 참조한다는 것입니다.사이트의 이전 링크를 새 링크로 바꿉니 까? (고객 측)

마이그레이션 담당자는 데이터베이스에 액세스 할 수 없으므로 모든 기사와 모든 링크를 수동으로 변경해야합니다.
오래된 사이트 맵과 새 사이트 맵을 가지고 있고 버튼을 클릭하기 위해 Greasemonkey/jQuery 스크립트를 작성하려고합니다. 스크립트는 모든 old-cms-links를 new-cms-links로 변경합니다.

이 경우 가장 좋고/가장 우아한 해결책은 무엇입니까? 배열 작업? 500 개 이상의 사이트/기사가 있습니다.

클라이언트 측 스크립트 만 허용된다는 점을 기억해주십시오.

현재이 작은 스 니펫은 모든 이전 링크를 a로 표시합니다!

$("#links").click(function() 
{ 
    $('a[href*="pattern-of-old-cms"]') 
     .append('<span class="attention" style="font-size: 25px; color:red;">!</span>'); 
}); 
+0

당신이 당신의 경우에'.htaccess'를 사용할 수 있습니까? '[R = 301]'태그를 사용하면 가장 좋은 해결책이 될 것입니다. – zessx

+0

아니, 오직 클라이언트 쪽 액세스 : ( – simplex123

답변

1

이 작업을 수행하는 것입니다! 보다 효율적인 페이지 처리 방법을 사용하십시오.

old_URLs.js :

var oldUrlArray = [ 
    "Old address 1", 
    "Old address 2", 
    "Old address 3", 
    // etc., etc. 
] 

new_URLs.js :

는 다음과 같이 두 개의 파일이 생성

var newUrlArray = [ 
    "New address 1", 
    "New address 2", 
    "New address 3", 
    // etc., etc. 
] 

을하고 GM의 .user.js 파일과 같은 폴더에 넣습니다.

그런 다음 스크립트가된다 :

// ==UserScript== 
// @name  _Mass link replacer remapper 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require old_URLs.js 
// @require new_URLs.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 
var oldLinks = $('a[href*="pattern-of-old-cms"]'); 

while (oldLinks.length) { 
    var firstHref = oldLinks[0].href; 
    var hrefIndex = oldUrlArray.indexOf (firstHref); 

    if (hrefIndex >= 0) { 
     var toReplace = oldLinks.filter ("[href='" + firstHref + "']"); 
     toReplace.attr ("href", newUrlArray[hrefIndex]); 

     oldLinks = oldLinks.not (toReplace); 
    } 
    else { 
     alert ("I don't know how to map the link: " + firstHref); 
     break; 
    } 
} 
+0

대단히 감사합니다! 나는 이것이 잘 동작 할 것이라고 생각한다. 나는 이미 배열로이 작업을 해결할 생각을했지만 힌트가 필요하다. :) – simplex123

+0

당신은 환영합니다; 기꺼이 도와주세요. –

1
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/'); 

하나 개의 솔루션은 500 .attr() 문을 실행하지 마십시오 모든 링크

+0

확실하지만, 500 다른 링크? – simplex123

+0

글쎄, 어쩌면 당신은 정규식을 만들 수 있습니다 ... –

+0

거의, 이전 링크는이 /index.php?id와 같습니다 = 181이고 새로운 URL은/about-us와 같은 친숙한 URL을 가지고 있습니다 jquery 솔루션이 유일한 것 같습니다 ... – simplex123

관련 문제