문제

이 mod_rewrite 규칙이 무엇을하고 있는지 설명 할 수 있습니까?

파일을 댓글을 달려고하지만 코드는 내가하고 있다고 생각하는 것과 반대되는 것 같습니다.

# Enable rewriting of URLs
RewriteEngine on


# Allow specified file types to be accessed
# Thing to test = URL
# Condition = not starting with  
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)


# RewriteRule will only be performed if the preceeding RewriteCond is fulfilled
# Remove index.php from all URLs     
# Pattern = anything (0 or more of any character)
# Substitution = index.php + the rest of the URL    
RewriteRule ^(.*)$ /index.php/$1 [L]  
도움이 되었습니까?

해결책

^ = begin of line
( = begin group
.* = any character, any number of times
) = end group

두 번째 부분의 1 달러는 첫 번째 부분의 그룹으로 대체됩니다.

이것이 공생 규칙입니까? 아이디어는 전체 쿼리 문자열을 index.php (프론트 컨트롤러)로 전달하여 전면 컨트롤러가 구문 분석하고 라우팅 할 수 있도록하는 것입니다.

다른 팁

브라우저는 서버에 요청을 보냅니다 (Apache, mod_rewrite를 사용하므로) :

프로필/편집을 받으십시오

Apache는이 요청을 받아들이고 구성 파일에서 Mod_rewrite를 통해 모든 요청을 전달하도록 구성한 것을 확인합니다. 따라서 문자열 '프로파일/편집'을 mod_rewrite로 보냅니다. 그런 다음 Mod_rewrite는 귀하가 지정한 규칙을 적용한 다음 (이전 게시물에서 설명한 방식으로) 요청을 'index.php/profile/edit'로 변환합니다. mod_rewrite가 완료된 후 Apache는 계속해서 요청을 처리하고 'OH,이 사람은 파일 index.php'를 요청하고 있습니다. 따라서 PHP 인터프리터를 호출하여 index.php-를 구문 분석하고 실행하고 '/profile/edit'을 인수로 가져옵니다. PHP 코드 (CI)는 이러한 인수를 구문 분석하고 응용 프로그램에서 올바른 모듈을 호출하는 방법을 알고 있습니다.

따라서 기본적으로 URL이 Index.php를 지정하지 않더라도 항상 index.php를 호출하는 방법입니다. 이런 식으로 Index.php는 프론트 컨트롤러로 작동합니다. 모든 요청을 응용 프로그램의 올바른 위치로 라우팅합니다.

URL이 index.php 또는 이미지 또는 CSS 또는 JS 또는 Robots.txt로 시작하지 않으면 문자열 "/index.php/"가 접두사가 있습니다.

index.php는 아마도 실행 파일 PHP 앱이므로 index.php는 CGI 환경에서 나머지 URL을 읽을 수 있습니다. ($ {path_info}에 저장됩니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top