2013-08-30 3 views
0

나는 최근에 작은 URL 단축키를 만들었습니다. 이제 mod_rewrite에 대한 정규식을 알아 내려고 노력했습니다. > 사용자 도메인 -URL 단축 서비스를위한 Mod_rewrite 정규식

mydomain.com/blahblahblah을 : 여기에 내가 무엇을 가지고 : 나는 내가 잘못 모르겠어요

$HTTP["host"] =~ "mywebsite.com" { 
    server.document-root = "/var/www/mywebsite.com" 
    url.rewrite-once = ("^/create.php(.*)" => "/create.php$1", 
         "^/(.*)" => "/index.php?key=$1") 
} 

(lighttpd를 위해), 이것은 내가하고 싶은 것입니다 .com/index.php? key = blahblahblah

그렇다면 mydomain.com/create.php가 아니라면 정규식을 무시하고 싶습니다. 어떻게해야합니까?

+0

출력은 무엇입니까? 나는 사용하는 언어에 익숙하지 않지만 어쨌든 거기에 아이디어를 던질 것입니다. '(^/create.php (. *) "=>"/create.php$1 ","^/(. *) "=>"/index.php?key=$1 ")' 명확하게 해시/사전 /지도/연관 배열 /이 언어로 불리는 모든 것이 생성됩니다. 이 언어가 순서가있는지도 또는 정렬되지 않은지도를 사용합니까? 정렬되지 않은 맵인 경우 regexes를 시도하는 순서를 제어 할 수 없습니다. ''^/(. *) "'를 먼저 시도하면 다른 URL은 아무 효과가 없으며 모든 URL을'create.php '가 아닌 것처럼 취급합니다. –

답변

0

조건부 사용은 어떻습니까? (docs), !~은 (는) 부정적인 정규식입니다.

$HTTP["url"] !~ "^/create.php(.*)" { 
    url.rewrite-once = ("^/(.*)" => "/index.php?key=$1") 
} 

이제는 create.php와 일치하는 다시 쓰기 규칙이 NOP이며 URL을 전혀 변경하지 않습니다.

url.rewrite-once-if-not-file = ("^/(.*)" => "/index.php?key=$1") 할 수도 있습니다.

편집 : url.rewrite-once-if-not-file이 유효하지 않습니다. url.rewrite-if-not-file은 유효하지 만 다시 작성하는 것과는 다른 동작을합니다 (once).