[.htaccess] .htaccess 파일에서 $ 1 [QSA, L]은 무엇을 의미합니까?

나는 나의 것을 바꿔야 .htaccess하고 내가 이해하지 못하는 두 줄이있다.

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

이 라인을 언제 사용해야합니까?



답변

완전한 튜토리얼을 제공하는 곳은 아니지만 여기서는 짧습니다.

RewriteCond는 기본적으로 “참인 경우에만 다음 RewriteRule 실행”을 의미합니다. !-l경로 요청 (링크가 아니라는 조건 !수단이 아닌 -l수단 링크)

한다 RewriteRule은 기본적으로 요청이 일치하는 것을 완료하면 것을 의미한다 ^(.+)$(서버 루트를 제외한 모든 URL과 일치)로, 그것은 다시 작성됩니다 index.php?url=$1에 대한 요청 의미 olle로 재 작성됩니다 index.php?url=olle).

QSA원래 URL로 전달되는 쿼리 문자열이 있다면, 그것이 재 작성에 추가되는 것을 의미합니다 ( olle?p=1로 다시 작성됩니다 index.php?url=olle&p=1.

L 규칙이 일치하면이 규칙 아래의 RewriteRules를 더 이상 처리하지 않음을 의미합니다.

이에 대한 자세한 정보를 보려면 위의 링크를 따르십시오. 재 작성 지원은 이해하기가 조금 어려울 수 있지만 스택 오버플로에 대해 배울 수있는 몇 가지 예가 있습니다.


답변

다음 조건이 참이면 URL을 다시 작성하십시오.
요청 된 파일 이름이 디렉토리가 아닌 경우

RewriteCond %{REQUEST_FILENAME} !-d

요청 된 파일 이름이 존재하는 일반 파일이 아닌 경우

RewriteCond %{REQUEST_FILENAME} !-f

요청 된 파일 이름이 심볼릭 링크가 아닌 경우

RewriteCond %{REQUEST_FILENAME} !-l

그런 다음 다음과 같은 방법으로 URL을 다시 작성합니다
. 전체 요청 파일 이름을 가져와 “url”쿼리 매개 변수의 값으로 index.php에 제공합니다. 추가 쿼리 매개 변수 (QSA)로 원래 URL의 쿼리 문자열을 추가하고이 .htaccess 파일 (L) 처리를 중지합니다.

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Apache 문서 #flag_qsa

다른 예시:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

[QSA] 플래그를 사용하여

/ pages / 123? one = two

매핑됩니다

/page.php?page=123&one=two


답변

이 같은 파일에 대한 요청을 캡처 version,
releaseREADME.md등 (의 / 릴리스 경우와 같이) 정의 나 같은 경우, 엔드 포인트로 중 하나를 처리해야하는 “찾을 수 없습니다.”


답변