2013-01-07 2 views
0

은 내가 그러나 어려움 위를 해석하는 데 문제 아파치 mod_rewrite는 설명서를 읽고다음 mod_rewrite 조건을 어떻게 해석합니까?

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) 

다음 다시 쓰기 조건을 가지고있다.

  1. 나는 요청 된 파일 이름이

  2. 요청 된 디렉토리가없는 경우 RewriteCond %{REQUEST_FILENAME} !-d 의미 조건을 누락 된 경우 조건 RewriteCond %{REQUEST_FILENAME} !-f가 의미하는 것을 알고있다.

  3. 나는 RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)가 무엇을 의미하는지 아무 생각이없는 조건에 해당하는 평가하지만 조건을 진행 한 규칙이 I 돈으로 RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

    경우 나의 이해가 적용되는 조건을 진행 규칙입니다

포인트 3이 아직 무엇을 의미하는지 알지 못한다면, 포인트 1이 사실로 평가되는 경우, 즉 요청 파일이 누락 된 경우 포인트 2가 즉, 요청 디렉토리가 누락 된 경우 즉, RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

EDIT 더 공정한 조금 주위에 파고 데 RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d 파일이나 디렉토리가 아니라 그들이없는 것을하지 않을 때 아무 의미가 나타납니다.

답변

1

마지막 줄은 "요청한 URI가 나열된 접미사 중 하나로 끝나지 않습니다"라고 말합니다. (KingCrunch 지적으로 엄밀히 말하면, 그것은 접미사 하나, 모든 문자열에 있는지 확인 끝인지 중간).

규칙 이 조건에 해당하는 경우 조건이 적용되는 다음; 조건을 선행하는 규칙은 분리되어 있으며 조건과 연결되어 있지 않습니다.

조건 1과 조건 2 및 조건 3이 모두 참으로 평가되면 다음 규칙이 실행된다는 것이 맞습니다. REQUEST_URI 표현식과 일치하지 않는 경우 !, 즉, 의미하지

;

는 마지막 정규 표현식을 분해하려면

.*은 0 번 이상 임의의 문자를 의미합니다.

\.은 마침표 (또는 전체 멈춤)를 의미합니다. 그렇지 않으면 백 슬래시로 이스케이프 처리됩니다. 그렇지 않으면 .은 임의의 문자를 의미하기 때문에;

(ico|gif|jpg|jpeg|png|js|css)은 즉, 수직 이동 막대 | 의해 분리 된 문자열 중 하나 "또는 icogif 또는 jpg 등"을 의미

정규식이 $ (문자열 끝 표식)으로 끝나도록 작성된 경우 접미사 뒤에 문자가 올 수 없습니다. 지금 쓴대로, 어떤 특성든지 따를지도 모른다.

따라서 RewriteCond는 REQUEST_URI가 일부 문자와 일치하지 않는지, 마침표가 오는지, 나열된 파일 유형 접미사 중 하나가 뒤에 오는 지 확인합니다. 그렇지 않은 경우 조건은 true로 평가됩니다.

+0

"끝이나 중간에 관계없이 접미사 중 하나가 문자열에 있는지 여부를 확인합니다."당신이 의미하는 바를 전혀 따르지 않았습니다. – PeanutsMonkey

+1

@PeanutsMonkey 편집 됨. 나는 그 설명이 의미가 있기를 바랍니다. – iamnotmaynard

+0

불행히도 좋은 정규 표현식 자습서에 대한 링크를 모르지만 인터넷을 검색 할 경우 거기에 많은 수의 정규 표현식이 있습니다. 사실 무수한 무수한 plethoras. – iamnotmaynard

1

마지막 조건은 REQUEST_URI에 'ico', 'gif', 'jpg'(등등) 중 하나가 포함되지 않을 때를 의미합니다. 세 가지 규칙 모두가 true으로 평가되면 (표시되지 않음) RewriteRule이 적용됩니다.

[1] 은 (는)이 (가) "끝나지 않음"이라고 말해야하기 때문에 불완전합니다. 그러나 이것은 다른 점입니다.

+0

킹 크 런치에 감사드립니다. '~해야한다 '라는 말의 의미는 무엇입니까?'또한'. * \. '예에서'.'와'. \'같은 메타 문자를 이스케이프 할 필요가 없다고 생각했습니다. – PeanutsMonkey

+0

"끝나야합니다"(사실, "should _not_ end"일 필요는 없습니다). 현재 조건이 예를 들어'my.jpg.php '와 일치하기 때문에'/'first; 그리고 정규 표현식에서'.'은 "임의의 문자"를 의미하므로 문자'.'를 원하면 이스케이프 처리해야합니다. – KingCrunch

관련 문제