2012-08-17 4 views
1

필자가 쓰고있는 링크 단축 서비스에 .htaccess를 사용하려고 시도해 왔습니다..htaccess/ModRewrite 문제

URL :http://domain.com/keyhere : 리디렉션 URL

http://domain.com/link.php?key=keyhere에 :http://domain.com/keyhere+ : 나는이 다음 달성하기 위해 시도하고

리디렉션

http://domain.com/analytics.php?key=keyhere에 내가 처음 일을 달성했지만, 후행 + 리디렉션 할 수 없습니다. +

남 이것에 대한 Y 코드는 다음과 같습니다 누군가가 필요한 재 작성 규칙을 올바른 방향으로 날 지점 수 있다면

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !# 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ link.php?key=$1 [L] 

, 즉 큰 것.

미리 감사드립니다. 당신이 +

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
# Also added non-existing directory condition 
RewriteCond %{REQUEST_FILENAME} !-d 
# What's this for?? 
#RewriteCond %{REQUEST_URI} !# 

# Match everything up to + ,followed by + first... 
RewriteRule ^([^+]*)\+$ analytics.php?key=$1 [L] 

# Next rule matches everything when there is no + 
RewriteRule ^([^+]*)$ link.php?key=$1 [L] 

패턴 [^+]*는 최대하지만 +을 포함하지 않는 0 개 이상 (*) 문자와 일치하는 것을 의미와 일치하는 두 번째 규칙이 필요합니다, 그래서

답변

1

그룹 (.*)는 욕심이다. 그 뒤에 $ (문자열의 끝)이 오면 그 문자열에 +이 들어 있지 않음을 의미합니다.

문자열 끝에 +이 있는지 테스트하려면 \+$을 포함시킵니다. +은 정규 표현식에서 특수 문자이기 때문에 이스케이프해야하지만 리터럴이 있기를 원합니다. 따라서 ^([^+]*)\+$캡처 문자열의 맨 끝에있는 +까지 +를 제외한 모든 문자를 (을 의미합니다.

+0

완벽하게 일했다. 이제! 이상 당신에게 저를 시도하고 그것을 이해하는 시간 만 번 감사합니다! :) –

+1

'^([^ +] *) \ + $'는 정규식입니다. '^'는 문자열의 시작을 의미하고, '[^ +]는 더하기가 아닌 문자'를 의미하고 '*'는 '0 번 이상 반복'을 의미하고, 마지막으로 '\ + 플러스 ", 그리고 그것은 정규식에서 정기적으로 사용되는 것처럼 탈출해야합니다. 마지막으로'$ '는 "문자열의 끝"을 의미합니다. – h2ooooooo