2011-03-25 3 views
6

안녕하세요, mod_rewrite 규칙을 루트 폴더 이외의 모든 리디렉션을 작성하려고합니다. 예를 들어, www.example.com은 index.html 파일을로드해야합니다. www.example.com/tag의/태그 내가 아파치 mod_rewrite를 제외하고 모든 것을 루트

RewriteCond %{REQUEST_URI} !^/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) app/webroot/$1 [L] 

이 그리고 지금의 서브 디렉토리

의 스크립트에 전달해야하는 index.html을 잘하지만/태그가 전달되지 않습니다로드 웹 루트. 404 오류가 발생합니다.

감사

+0

다시 쓰기 규칙을 RewriteRule (. *)로 변경하면 http : //www/yourdomain.com/app/webroot/$1 [L, R]로 리디렉션되는 URL은 무엇입니까? – Wige

답변

7

이 조건은 문제 : 당신은 '/'를 다시 작성되지 시작 아무 말도하고

RewriteCond %{REQUEST_URI} !^/ 

, 모든 것이 '/'로 시작합니다. 당신은 마지막에 $를 사용해야합니다 :

RewriteCond %{REQUEST_URI} !^/$ 

내가 index.html을가 존재하는 경우 다른 두 개의 규칙이 자동으로 알아서하기 때문에 당신은,하지만, 모든 규칙을 필요 모르겠어요.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ app/webroot/$1 [L,QSA] 

그리고 당신은 어쨌든 서브 디렉토리에있는 것이기 때문에 당신은 앱에서 404 오류를 처리 할 수 ​​있습니다 : 그냥하지 않습니다 아무것도를 다시 작성하려면 다음을 사용하여 물리적으로 존재한다.

+0

완벽한! 정말 고맙습니다! 나는 이것을 알아 내려고 4 시간 동안 머리를 노크했다. – sho

관련 문제