2017-12-07 9 views
1

안녕하세요. 나는 "URL shortener"를 코딩하기 시작했다. 기본 아이디어는 example.com/12345를 사용하여 다른 URL로 리디렉션하는 것입니다. 이 "매칭"은 .htaccess를 사용하여 (현재 우리와 관련이없는) 스크립트를 향해 물건을 리다이렉트함으로써 이루어집니다.302 .htaccess RedirectMatch 후에 원본 URL을 가져올 수 있습니까?

내 htaccess로는 현재 다음과 같습니다

RedirectMatch 302 ^/\w{5}$ /redir.php 

리디렉션 정확히 5 문자열과 일치 확장 된 URL에 실제 리디렉션이 발생하는 내 PHP 스크립트를 향해 보냅니다. 유일한 문제는 원본 URL, 일치 된 URL을 변수로 가져 오는 올바른 방법을 찾을 수 없다는 것입니다. 이 문제 누락 된 설정에서 발생 할 수 있습니다, 그래서 만약 모든 것이, 최소한의 지식으로 저에 의해 설정된 VPS에 일어나는 (!) 참고로

($ _SERVER [ 'HTTP_REFERER'] 작동하지 않습니다), 다음 기대 내 configs 100 % 정확하고 표준에 의해되지 않습니다.

EDIT : RedirectMatch에서 RewriteRule으로 변경되었지만 여전히 작동하지 않습니다.

RewriteRule ^(\w{5})$ /redir.php?redir=$1 [R,L] 

이이 PARAM redir를 쿼리 문자열로 5 문자로 구성된 문자열을 보내드립니다 :

RewriteRule ^\w{5}$ /redir.php [R,L] 
+0

대신 INT 대신 base62 같은 것을 사용하고 데이터베이스 ID와 같은 가능한 무언가로 디코딩. 이 라이브러리는 모든 것을 할 것입니다. http://hashids.org/ –

+0

게다가, 10000에서 99999까지의 엔트로피는 그리 많지 않습니다. 그리고 번호는 쉽게 통과 할 수 있습니다. –

+0

아, 질문에 대답하려면'$ _SERVER [ 'REQUEST_URI']'를 사용하십시오 :/ –

답변

1

는 다음과 같은 규칙을 사용할 수 있습니다.

$_GET['redir'] 

편집 : 또는 @LawrenceCherone이 제안대로 redir.php에 $_SERVER['REQUEST_URI']을 사용할 수 있습니다 당신은 redir.php에서 액세스 할 수있는. 그러나 당신 체감 대신 .htaccessNC 플래그를 사용해야합니다 :

RewriteRule ^(\w{5})$ /redir.php [NC,L] 
+1

이것이 정상적으로 작동하는 것 같습니다. 현재/redir.php?redir=stuff에 페이지가 남아 있도록 스크립트에서 리다이렉트를하지 않고 있습니다. 예를 들어, 변수로 사용할 수 있습니다. 헤더 리디렉션과 함께 사용하면 표시되지 않습니다. redir.php는 모두 즉시 리디렉션합니다. 그럼 우리가 보자 ... 도 입력 주셔서 감사합니다 EDIT : 작동하는 것 같습니다! –

+0

아니면 htaccess를 그대로두고 redir.php 파일에서'$ _SERVER [ 'REQUEST_URI']'를 사용하면됩니다. 대부분의 프레임 워크처럼 그렇습니다. –

+0

@LawrenceCherone 그게 무슨 이유로 작동하지 않았다. 아직 확실하지 않은 이유. –