나는 나의 것을 바꿔야 .htaccess
하고 내가 이해하지 못하는 두 줄이있다.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$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를 더 이상 처리하지 않음을 의미합니다.
이에 대한 자세한 정보를 보려면 위의 링크를 따르십시오. 재 작성 지원은 이해하기가 조금 어려울 수 있지만 스택 오버플로에 대해 배울 수있는 몇 가지 예가 있습니다.
?
에 &
이 불가능 구별하고, /page&foobar
대 /page?foobar
. QSA가로 교체 ?
되는 것을 어떻게 막을 수 &
있습니까?
다음 조건이 참이면 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]
다른 예시:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
[QSA] 플래그를 사용하여
/ pages / 123? one = two
매핑됩니다
/page.php?page=123&one=two