2012-05-18 4 views
0

저녁에서 나는에서 파일을 실행하고 ? 루트 웹/ 은 mod_rewrite를은</p> <p>, Cahe 및 % {DOCUMENT_ROOT} % {REQUEST_URI}

내가 URL을로드

입니다 : 로컬 호스트/사이트/gubbinz/index.php를 요청 = home.html을

내가 파일 ./sites/gubbinz/이 있는지 확인하려면

cache/home.html

나는이 다음 사용하여 작업을 얻을 수 있습니다 : 그것은 내가 로컬 호스트에 대한 하나의 규칙을 가지고 살 수있는 의미로

RewriteCond %{QUERY_STRING}  ^request=(.*) [NC] 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}cache/home.html -f 
RewriteRule ^.+$ cache/%1 [QSA,L] 

나는 후자를 선호 :

RewriteCond %{QUERY_STRING}  ^request=(.*) [NC] 
RewriteCond /home/user/Web/sites/gubbinz/cache/home.html -f 
RewriteRule ^.+$ cache/%1 [QSA,L] 

하지만 좋아하지 . 아무도 내가 잘못 가고 있는지 알 수 있습니까?

N.B. RewriteBase 세트가 없습니다.

RewriteCond %{SCRIPT_FILENAME} ^(.+)\/index.php$     [NC] 
RewriteRule .* - [E=PATH:%1] 

RewriteCond %{QUERY_STRING}  ^request=(.*) [NC] 
RewriteCond %{ENV:PATH}/cache/%1.html -f 
RewriteRule ^.+$ cache/%1.html [QSA,L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^.+$ index.php?request=$0 [QSA,L] 

첫 번째 부분은 요청이 오는 디렉토리의 전체 경로를 가져옵니다

+0

'% {REQUEST_URI}'다음에 슬래시를 넣을 수 있습니까? – Ansari

+0

REQUEST_URI 인쇄 나는 그 페이지에 다른 내부 리디렉션을하고 있기 때문에 /sites/forebears/index.php를 발견했습니다. 위의 두 번째 예제는 그렇게하지 않으면 작동합니다. –

+0

REQUEST_URI가 index.php로 끝나는 것을 알고 있다면 물론 이것은 파일이 아닙니다 :'% {DOCUMENT_ROOT}/sites/forebears/index.phpcache/home.html' – Ansari

답변

1

일부 손보는 후이 그 다중 서버 환경을위한 필요없이 서버에서 작동과 내가 올 수있는 최선입니다 환경 변수로 저장합니다. index.php가 끝 부분에서 삭제됩니다.

두 번째 부분은 실제로드 된 URL이 포함 된 내부 리디렉션을 가져 와서 HTML의 캐시 된 버전이 있는지 확인하고 내부 리다이렉션을 수행하는지 확인합니다.

세 번째 부분은 "검색 엔진 친화적 URL"을 사용하고 index.php? request = {URL} 로의 내부 리디렉션을 수행합니다.

그래서 짧은에, 당신은 URL을로드 :

http://domain.com/page/sub-page

세 번째 조건 집합이 리디렉션 :. ENV VAR와

http://domain.com/index.php?request=page/sub-page

그런 다음 두 번째 세트를 (. 첫 번째 규칙에서 설정) ./cache/page/sub-page.html이 서버에 있는지 확인합니다. 그러면 해당 페이지가 브라우저에 표시됩니다.

N.B. 세 번째 조건 집합이 필요하지 않다는 것을이 사용법에서 발견 할 수있는 사람에게는 두 가지 규칙만으로이 작업을 수행 할 수 있습니다. 나는 PHP 처리의 일부로 index.php? request = 555로 리디렉션을 사용합니다.

관련 문제