2011-09-23 4 views
0

맞춤 제휴 프로그램을 만들고 있습니다. 나는 가능한 한 친절한 SEO로 내 링크를 원한다. 그래서 나는 URL에 추가 된 자바 스크립트 해시를 사용하여 제휴 ID를 보내고, 제휴 ID를 읽고, 클릭을 저장 한 다음, 연결된 페이지로 301을 다시 보낸다. 너무. 그런 식으로 우리는 정식 문제를 전혀 가지지 않으며, 모든 제휴 링크는 링크 주스를 전달합니다!맞춤 제휴 URL에서 Javascript 해시를 올바르게 읽는 방법?

이제 다음 URL을 어떻게 읽습니까? 심판의 해시 값을 얻고 클릭을 추가 한 후

www.mydomain.com/seo-friendly-url#ref=john 

, 어떻게 것 그때 301 다시 직접 사용자가 다시

www.mydomain.com/seo-friendly-url 

에 어떤 도움이 크게 감사합니다!

답변

3

조각 식별자 (# 뒤에 오는 부분)는 서버로 보내지지 않으므로 HTTP 응답 (301 리디렉션에 필요함)을 낼 수있는 어떤 것으로도 읽을 수 없습니다.

+0

을 www.mydomain.com/seo-friendly-url?ref=john 하지만 그들은 내 php affiliatecheck 스크립트로 읽히지 않습니다. 내가 htaccess에 의해 전송되는 서재응 URL을 사용하고 있기 때문입니까? – PaperChase

0

URL의 "해시"부분은 서버에 전달되지 않으므로이 데이터를 서버 측 리디렉션이나 처리에 직접 사용할 수 없습니다. 그러나, 그것은 페이지로드 해시를 잡아 AJAX 또는 재 지정을 통해 서버에게 전달 할 수 있습니다 : 다음

즉시 www.mydomain.com/seo-friendly-url/ref/john

if (window.location.hash.match(/#ref=/)) 
    window.location = window.location.href.replace('#ref=', '/ref/') 

www.mydomain.com/seo-friendly-url#ref=john에서 사용자를 리디렉션하려면 ...하지만, 왜 여분의 다리 작업을 시작하고 저장하려면 www.mydomain.com/seo-friendly-url/ref/john을 사용하지 않았습니까? AJAX를 통해 다른 경로는 페이지가로드 된 후 해시의 값을 읽은 다음 기록 할 서버로 보냅니다.

은 (주 :이 코드는 AJAX GET 요청을 보내도록 generic cross-browser XMLHTTPRequest를 사용하여 [당신이 라이브러리를 사용하는 경우] 라이브러리의 구현으로 대체합니다.) I와 같은 일반 변수를 사용하여 시도했다

window.onload = function() { 
    // grab the hash (if any) 
    var affiliate_id = window.location.hash; 
    // make sure there is a hash, and that it starts with "#ref=" 
    if (affiliate_id.length > 0 && affiliate_id.match(/#ref=/)) { 
     // clear the hash (it is not relevant to the user) 
     window.location.hash = ''; 
     // initialize an XMLRequest, send the data to affiliate.php 
     var oXMLHttpRequest = new XMLHttpRequest; 
     oXMLHttpRequest.open("GET", "record_affiliate.php?affiliate="+affiliate_id, true); 
     oXMLHttpRequest.onreadystatechange = function() { 
      if (this.readyState == XMLHttpRequest.DONE) { 
       // do anything else that needs to be done after recording affiliate 
      } 
     } 
     oXMLHttpRequest.send(null); 
    } 
} 
관련 문제