2009-12-11 6 views
3

다시 작성 규칙은 무엇을 의미합니까?/ 누군가가 그 규칙 (들)이 무엇 나를 설명 할 수 - :RewriteRule (mod_rewrite)

RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 

죄송합니다, 심지어 mod_rewrite를 구문 설명을 읽은 후, 나는 ...하지 않았다.

고마워요.

답변

6

나는 희망을 갖고 이것을 정리하는 간단한 설명을하려고합니다.

첫 번째 정규 표현식을 사용한 적이없는 경우 먼저 찾아보십시오.

RewriteRule은 세 가지 다른 부분입니다. 첫 번째는 특정 패턴에 대한 요청 문자열을 검색하는 데 사용되는 표현식입니다. 두 번째는 실제로 서버에서 제공되는 대상 문자열입니다. 세 번째 옵션은 대괄호 안에 들어갑니다.

클라이언트가 정규식 중 하나의 형식으로 서버에 요청하면 대상 문자열이 실제로 호출되어 사용자에게 반환되지만 사용자는이 작업을 볼 수 없습니다. 괄호 안에있는 정규 표현식의 내용은 대상 문자열에 사용하기 위해 저장됩니다.

I 입력 http://www.example.com 및 서버는 인덱스 페이지 또는 이미 이전에 의해 결정 filelisting (또는 뭔가를 반환하여 두 가지 규칙 (당신의 위치를 ​​가정하는 것은 http://www.example.com/이다)에 따라서

는 다음과 같은 문제가 발생할 것입니다. htaccess 파일).

입력 http://www.example.com/page2.html과 서버는 app/webroot/page2.html을 반환합니다. 해당 파일이 없으면 404 오류 페이지가 표시됩니다.

둘 다 RewriteRules의 끝에는 [L]이 있습니다. 이게 아파치에게 이것이 마지막 규칙이라는 것을 알려주는 것입니다. 규칙이 맞으면 아파치는 그것을 실행하고 추가 규칙을 읽지 않는다. 쉼표로 구분하여 사용할 수있는 다른 옵션이 있습니다.

+0

특별히 무엇인가가 있다면 나는 그것이 당신을 혼란스럽게한다고 말했고 알려 주면 해결하도록 노력할 것입니다. –

+0

설명에 감사드립니다. 두 번째 규칙 (RewriteRule (. *) app/webroot/$ 1 [L])은 설명을 읽은 후 나에게 완전히 이해가됩니다. 첫 번째 규칙은 무엇을합니까? (... 특히 첫 번째 규칙 내에서 "^ $"는 나에게 이상한 것처럼 보입니다.) 다시 한 번 감사합니다. –

+0

세스가 아주 잘 설명해줍니다. ^는 정규식에서 '문자열의 시작'으로 정의되고 $는 '문자열의 끝'으로 정의됩니다. 이 경우 '^ $'은 빈 문자열로 평가됩니다. 따라서 서버는 파일을 찾지 않아서 ./app/webroot/으로 평가됩니다. 아파치가 "비어있는"요청을 처리하는 방식 때문에, 내가 언급 한 것을 반환 할 수있다. 또한 webroot가 디렉토리이므로 '/'를 추가합니다. –

1

^$/에 대한 요청을 캐치하고 app/webroot/으로 리디렉션합니다. [L]은 이것이 "마지막"규칙임을 나타냅니다. 즉,이 규칙이 요청과 일치하면 mod_rewrite가 처리를 중지합니다.

(.*)은 무엇이든 일치하며 app/webroot/으로 리디렉션하고 "anything"부분을 추가합니다. 다시 [L]은이 규칙이 실행 된 후 처리를 중지한다는 의미입니다.

첫 번째 규칙은 http://www.yoursite.com/app/webroot/로 전송, http://www.yoursite.com/에 대한 요청을 잡을 것 (웹 서버는 다음과 같은 요구를 만족시킬 수의 index.php로, 인덱스 문서를 제공합니다.

두 번째 규칙을 다른 요청을 잡을 것 http/// www.yoursite.com **/path/to/some/page.php **와 같이 굵은 글씨체는 "캡쳐 된"이고 mod_rewrite는 요청을 http://www.yoursite.com/app/webroot/path/to/some/을 page.php.

이 사용자는 http://www.yoursite.com/를 볼 것입니다.

또한이 표현식은 문제를 일으킬 수 있습니다.http://www.yoursite.com/app/webroot/index.php을 입력하면 mod_rewrite가 요청을 http://www.yoursite.com/app/webroot/app/webroot/index.php으로 변경합니다. 이는 아마도 원하는 것이 아닙니다.

+0

감사합니다. –