mod_alias aliasmatch regex- 두 패턴을 제외한 폴더의 모든 것을 일치시겠습니까?

StackOverflow https://stackoverflow.com/questions/1352920

  •  20-09-2019
  •  | 
  •  

문제

aliasmatch를 사용하여 폴더 내의 모든 것에 대한 별명을 만들고 싶습니다. 제외하고 두 가지 (또는 그 이상의) 특정 Regex 패턴의 경우.

예를 들어 다음 aliasmatch는 'Content'폴더의 모든 것에 대한 별칭을 만듭니다.

AliasMatch /content(.*) /home/username/public_html/$1

그러나 위의 별칭이 일치하고 싶지 않은 두 가지 Regex 패턴이 있습니다.

^content/([a-zA-Z0-9_-]+)/id-([a-zA-Z0-9_-]+)/([0-9]+)
^content/([a-zA-Z0-9_-]+)/nn-([a-zA-Z0-9_-]+)

((!) 문자는 패턴을 무효화하는 데 사용될 수 있지만 여기서 사용하는 방법이나 별명에서 여러 패턴을 부정하는 방법을 모르겠습니다.

어떻게 이렇게 할 수 있습니까?

도움이 되었습니까?

해결책

당신이 말하는 것은 불려집니다 부정적인 전망, 그리고 당신은 다음과 같이 일치시키고 싶지 않은 것을 위해 Regex 주위에 그것을 감싸고 있습니다. (?!foo). Regexes를 결합하는 것은 그들 사이의 파이프와 함께 끈으로 간단 할 수 있지만이 경우 그보다 조금 더 잘할 수 있습니다. 이 REGEX는 동일합니다.

[a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+)

파이프 (또는 '|', 교대 연산자)는 다른 무엇보다 우선 순위가 낮으며, 교대는 그룹에 포함되어야합니다. 내가 사용했음을 주목했다 비과 캡처 그룹 -- 즉, (?:...) - 그리고 당신의 regexes의 괄호를 제거했습니다. 그렇지 않으면, 그들은 당신이 한 그룹의 번호를 버렸을 것입니다. 하다 캡처하고 싶고 다른 것을 사용해야했을 것입니다. $1 규칙의 두 번째 부분에서. 여기에 전체 regex가 있습니다.

^/content(?![a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+))(.*)

편집 : 분명히 Aliasmatch에서 사용하는 Regex 맛은 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

아니면 당신은 a로 무언가를 할 수 있습니다 <DirectoryMatch> 지침 또는 mod_rewrite로 전환함으로써. 그러나 나는 (분명히) Apache 전문가가 아닙니다. Specialty는 Regexes이며, Regex가 귀하의 문제를 해결할 것이라고 생각하지 않습니다.

다른 팁

Modalias는 실제로 부정적인 전망대를 지원합니다. 내 사이트에서 이것을 사용하고 있습니다. 매우 잘 작동합니다.

AliasMatch ^/(?!w/|BingSiteAuth\.xml$|favicon\.ico$|google.{16}\.html$|robots\.txt$) /path/to/file

항상 mod_alias의 첫 번째 캐릭터이므로 Regex를 "/"로 시작하십시오! 전망대로 규칙을 시작하지 마십시오. 그렇지 않으면 구문 분석이 실패합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top