2013-01-03 2 views
2

PHP 또는 JS로 링크의 크기를 줄일 수 있습니까?링크 (URL) 크기 줄이기

예. 나는 이런 링크가 있습니다 링크가 단축 여전히 같은 위치를 가리 할 수있는 경우

http://www.example.com/index.html      <- Redirects to the root 
http://www.example.com/folder1/page.html?start=true <- Redirects to page.html 
http://www.example.com/folder1/page.html?start=false <- Redirects to page.html?start=false 

목적은, 발견하는 것입니다. 이 예제에서 처음 두 링크는 ​​줄이기 때문에 첫 번째 링크는 루트를 가리키고 두 번째 링크는 생략 할 수있는 매개 변수를 가지고 있기 때문입니다.
세 번째 링크는 매개 변수를 생략 할 수없는 경우입니다. 즉, http://을 제거하는 것보다 더 줄일 수는 없습니다.

그래서 위의 링크는 다음과 같이 감소된다 :

Before: http://www.example.com/index.html 
After: www.example.com 

Before: http://www.example.com/folder1/page.html?start=true 
After: www.example.com/folder1/page.html 

Before: http://www.example.com/folder1/page.html?start=false 
After: www.example.com/folder1/page.html?start=false 

는 PHP 또는 JS에 의해이 가능합니까?

참고 :

www.example.com 내가 소유하거나 URL을 통해 외에 액세스 할 수있는 영역이 아니다. 링크는 잠재적으로 알려지지 않았기 때문에 URL을 얻는 등의 작업을 할 수있는 자동 링크 단축키를 찾고 있습니다.

사실 링크가 자동 트림 전후에 작동하는지 확인할 수있는 링크 체크러와 같은 것을 생각하고 있었는데 링크가 덜 트림 된 버전에서 다시 검사가 수행됩니다.

JS :하지만 그

+0

은 www.example.com입니다. 귀하의 웹 사이트 (즉, 귀하가 관리하고 있음) 또는 www.example.com의 모든 웹 사이트입니까? – GeneSys

+0

서버 액세스 권한이 있다면 .htaccess'RedirectRule'의 –

+0

아니요, 내 도메인이 아닙니다. 위의 추가 된 쪽지. – Steeven

답변

1

자동으로이 작업을 수행하려면, 당신은 매개 변수가 동작을 변경하는 방법을 알 수 없기 때문에, 당신은 시행 착오하여이 작업을 수행해야합니다 : 부품을 제거하려고 URL에서 확인하고 서버가 다른 페이지로 응답하는지 확인하십시오. 가장 간단한 경우

는이 같은 어떻게 든 일할 수있는 다음과 같은 경우에 볼 수 차례에 각 매개 변수를 테스트 할 것입니다 귀하의 사용 시나리오에 대한

<?php 
    $originalUrl = "http://stackoverflow.com/questions/14135342/reduce-link-url-size"; 

    $originalContent = file_get_contents($originalUrl); 

    $trimmedUrl = $originalUrl; 

    while($trimmedUrl) { 
     $trialUrl = dirname($trimmedUrl); 
     $trialContent = file_get_contents($trialUrl); 
     if ($trialContent == $originalContent) { 
      $trimmedUrl = $trialUrl; 
     } else { 
      break; 
     } 
    } 

    echo "Shortest equivalent URL: " . $trimmedUrl; 
    // output: Shortest equivalent URL: http://stackoverflow.com/questions/14135342 
?> 

, 코드는 좀 더 복잡 할 것 필요하다. 시작 지점은 parse_url()parse_str() 기능을 참조하십시오.

주의 할 점 :이 코드는 단축하려는 모든 URL에 대해 많은 쿼리를 수행하므로 매우 느립니다. 또한 서버가 응답에 타임 스탬프와 같은 항목을 포함 할 수 있으므로 많은 URL을 단축하지 못할 수도 있습니다.이것은 문제를 매우 어렵게 만들고 그 이유는 구글과 같은 회사가 이런 식으로 생각하는 엔지니어가 많은 이유입니다. :)

+0

이제 외부의 호스트에 대해 "로컬"호스트로 간주하지 않고 요청, 나쁜 생각, 나쁜 습관으로 외부 서버를 스팸하도록 말하고 있습니다. – Cerbrus

+1

좋은 일은'robots.txt'를 먼저 확인하는 것입니다. 그러나 나는 "그럴 수 없다"고 말하기보다는 그 질문에 답하려고 노력했다. 이런 종류의 부하에 문제가있는 서버는 인터넷에 연결하지 않는 것이 좋습니다. 모든 웹 서버는 오류, Google 또는 취약성을 검색하는 사람들로부터 수천 개의 이러한 "스팸"요청을받습니다. –

+0

그 시작이 될 것입니다. 하지만 타임 스탬프가 포함될 수도 있고 페이지에 방문 카운터/시계가있을 수도 있고 페이지에 동적/임의의 콘텐츠가 포함될 수도 있습니다. 이론 상으로는 실제로 작동 할 수도 있지만 실제로는? 안돼. – Cerbrus

0

참으로 그 가능 ... 잔인한 사람처럼 보였다

var url = 'http://www.example.com/folder1/page.html?start=true'; 
url = url.replace('http://','').replace('?start=true','').replace('/index.html',''); 

PHP :

$url = 'http://www.example.com/folder1/page.html?start=true'; 
$url = str_replace(array('http://', '?start=true', '/index.html'), "", $url); 

합니다 (array()의 각 항목이 ""로 대체됩니다)

+0

좋아, 그럼 내가 뭔가 자동적으로 필요해. URL을 모를 수도 있습니다. – Steeven

+0

그래서 "현재 페이지"로 변경해야합니까? – Cerbrus

+0

현재 페이지는 무엇을 의미합니까? 질문에 대한 내 메모를 참조하십시오. 웹 사이트에서 인쇄하고 싶은 링크가 많습니다. 여분의 불필요한 문자가 가득 찰 수 있기 때문에 먼저 링크를 가능한 짧게해야합니다. – Steeven

0

여기에 JS가 있습니다.

function trimURL(url, trimToRoot, trimParam){ 
    var myRegexp = /(http:\/\/|https:\/\/)(.*)/g; 
    var match = myRegexp.exec(url); 
    url = match[2]; 
    //alert(url); // www.google.com 
    if(trimParam===true){ 
     url = url.split('?')[0]; 
    } 
    if(trimToRoot === true){ 
     url = url.split('/')[0]; 
    } 
    return url 
} 

alert(trimURL('https://www.google.com/one/two.php?f=1')); 
alert(trimURL('https://www.google.com/one/two.php?f=1', true)); 
alert(trimURL('https://www.google.com/one/two.php?f=1', false, true)); 

바이올린 : http://jsfiddle.net/5aRpQ/