2012-03-29 7 views
0

다음 URL 재 작성 규칙의 의미를 이해하려면 약간의 도움이 필요합니다. 나는 처음 세 줄을 강조 할 수는 있지만, index.php/$1 부분으로 막혔다. 이 규칙에서 정확히 /은 무엇을 의미합니까? 파일 이름 다음에 항상 예상되는 유일한 것은 쿼리 문자열 구분 기호 (?)입니다. 구분자로 /이 표시되는 것은 이번이 처음입니다. 정확히 무엇을 의미합니까?PHP 및 URL 재 작성

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    RewriteRule ^(.*)$ index.php/$1 [PT,L]  
</IfModule> 

답변

6

<IfModule mod_rewrite.c>...</IfModule> 블록은 블록 withing에 포함되어있는 모든 만 mod_rewrite 경우 고려되는 것을 보장 :로

http://www.example.com/something/else 

는 동일합니다 모듈이로드되었습니다. 그렇지 않으면 서버 오류가 발생하거나 URL 재 작성을위한 모든 요청이 무시됩니다.

다음 두 줄은 그 뒤에 오는 RewriteRule 줄의 조건입니다. 이 두 가지 다시 쓰기 조건이 충족되는 경우에만 RewriteRule이 수락됨을 의미합니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

조건은 단순히 요청 된 URI는 "기존 파일"이나 폴더 유형이 아닌 경우에만 수행됩니다 다시 쓰기 상태. 즉, 요청 된 파일/폴더가 실제로 요청 된 서버 경로에 존재하면 해당 서버/파일 경로가 제공되고 그렇지 않으면 재 작성이 수행됩니다.

마지막 줄은 실제 다시 쓰기 작업을 수행합니다. 웹 사이트의 도메인 이름을 따르는 모든 것을 취하여 다시 작성한 요청에 추가합니다.이 요청은 index.php/으로 시작합니다.

여기 예입니다.

다음 URL (example.com/example-page.html)을 요청한다고 가정 해 보겠습니다.

가상 호스트 루트 폴더에 example-page.html이라는 기존 파일이나 폴더가없는 경우 끝에있는 다시 쓰기 규칙은 실제로 다음 URI를 example.com/index.php/example-page.html으로 요청합니다.

같은 물건을위한 일반적인 이유는 요청을 수신하는 웹 응용 프로그램이 하나의 중앙 부트 스트랩 파일 (여기 그것 index.php)

편집을 모든 요청을 처리 담당하는 방식으로 설계되어있다 : 여기 내 의견에 mod_rewrite에 대한 아주 좋은 초보자 친화 튜토리얼입니다.

http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/

2

URL 이름을 다시 쓰는 것입니다. 예를 들어

,이 URL :

http://www.example.com/index.php/something/else 
+0

예,하지만'index.php/something/else'의 의미는 무엇입니까? – DotNetStudent

+3

아파치는 index.php를 호출하지만, 스크립트는 $ _SERVER [] superglobal에서 뭔가를 추출하기 위해 약간의 작업을 수행 할 것입니다 –