당신이 말하는 것은 부정적 선견문입니다. 일치시키지 않으려는 대상은 (?!foo)
과 같은 정규식으로 둘러 쌀 수 있습니다. 정규 표현식을 결합하는 것은 그 (것)들 사이의 파이프와 함께 스트링처럼 간단 할 수 있지만,이 경우보다 조금 더 잘할 수 있습니다.
[a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+)
파이프 (또는 '|'
, 교대 연산자) 무엇보다 낮은 우선 순위를 가지고 있기 때문에, 교번이 그룹에 포함되어야한다 :이 정규 표현식은 동일한 두 개의 정규 표현식에의 첫 번째 부분을 재사용한다. 비 캡처 그룹 (예 : (?:...)
)을 사용하고 정규식에서 괄호를 제거했습니다. 그렇지 않으면, 그들은 을으로 캡처하려는 그룹의 번호 매기기에서 벗어났습니다. 그리고 규칙의 두 번째 부분에서 $1
이외의 것을 사용해야했습니다. 여기에 전체 정규식입니다 :
^/content(?![a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+))(.*)
편집 : 분명히, AliasMatch에서 사용하는 정규식 맛이 lookaheads을 지원하지만, 자신의 부정 구문은하지 않습니다 !(^/foo)
합니다. 그 목적은 전체 정규식을 부정하는 것으로 보이는데, 이는 당신을 도울 수 없다는 것을 의미하지만 어쩌면 그것을 필요로하지 않을 수도 있습니다. 어쩌면 그 디렉토리들을 그들 자신에게 별명을 붙일 수 있습니다. 그러면 아무 것도 무효화하지 않아도됩니다.
AliasMatch ^(/content/[a-zA-Z0-9_-]+/id-[a-zA-Z0-9_-]+/[0-9]+.*) $1
AliasMatch ^(/content/[a-zA-Z0-9_-]+/nn-[a-zA-Z0-9_-]+.*) $1
AliasMatch ^/content/(.*) /home/username/public_html/$1
아니면 당신이 <DirectoryMatch>
지시문 뭔가를 할 수 있으며, mod_rewrite에로 전환. 하지만 (분명히) 아파치 전문가가 아니에요. 제 전문은 정규 표현식이고 정규 표현식이 문제를 해결할 것이라고 생각하지 않습니다.
고맙습니다. :)하지만, httpd.conf ("AliasMatch [정규식]/home/username/public_html/$ 1")에 복사 한 내용을 복사 한 후에는 httpd가 더 이상 컴파일되지 않습니다. 컴파일 할 수 없었다. " 구문 오류. 여기서 문제는 무엇입니까? 나는 그것을 잘못 사용하고 있는가? – Tristan
문제는 lookahead와 관련이있는 것 같습니다. httpd.conf는 구문 분석 할 수없는 것 같습니다. – Tristan
네 말이 맞아. 제 편집을 봐. –