2012-12-16 5 views
1

현재 내 프로젝트 중 하나에 URL 단축기 기능을 만들려고합니다. 사용자가 슬래시 (디렉토리) 또는 파일 확장명을 포함하지 않는 URL로 사이트를 방문하면 올바른 파일을 제공 할 PHP 스크립트로 리디렉션해야합니다. 예를 들어 :URL을 mod_rewrite로 줄이십시오.

http://example.com/A123http://example.com/view.php?id=A123

하지만 http://example.com/A123/가 다시 쓰지 것처럼 다시 쓸 것이고, http://example.com/A123.png 중 하나를 다시 작성되지 않습니다. 나는 지금 몇 시간 동안 mod_rewrite를 망쳐 놓고있다. 그리고 나는이 일을 할 수 없다. ...

답변

0

나는 확실히 이것에 전문가가 아니지만 내가 성취하려고하는 것과 비슷하다. 내가 제대로 이해한다면 (see my yet unanswered question)

그러나,이 (테스트되지 않은) RewriteRule 작동 할 수 : 1 또는 charactor의 이상 (*) 인스턴스를 :

RewriteRule ^([^\.\/]*)$ view.php?id=$1 [L] 

마법 부분을 말한다 [^\.\/]*입니다 ([]) ([^ ]) 마침표 또는 슬래시 (\)는 이러한 문자를 이스케이프합니다.

내가 말했듯이, 나는 이것을 시험하지도 않았고 전문가도 아니었지만 아마도 도움이 될 것입니다.

2

단축해야 할 URI를 식별 할 수있는 방법이 없으면 다른 모든 가능성을 제외해야합니다. 이렇게하면 긴 제외 목록을 작성해야 할 가능성이 높습니다. 아래는 출발점입니다. 이러한 각 조건은 요청 URI가 일치하지 않음을 확인합니다 (!로 표시됨). 조건과 일치하지 않으면 규칙이 실행됩니다. (요청한대로)

RewriteCond %{REQUEST_URI} !^/view.php 
RewriteCond %{REQUEST_URI} !.html$ 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^/(.*)$ http://example.com/view.php?id=$1 [QSA] 

위는 후행 슬래시없이 디렉토리 요청을 처리 할 수있는 표준적인 규칙을, 휴식을 필요로한다. 위의 규칙이 Apache 서버 측 디렉토리 규칙을 어기면 다른 문제를 접할 수 있습니다.

논리를 다시 생각해보십시오. 단축 될 URL을 식별 할 수있는 방법이 있다면 훨씬 쉬울 것입니다. 예 : 's', http://example.com/s/A123.

RewriteCond %{REQUEST_URI} ^/s/ 
RewriteRule ^/s/(.*)$ http://example.com/view.php?id=$1 [QSA] 
관련 문제