2012-07-23 3 views
5

mod_rewrite 조건/규칙에 이상한 문제가 있습니다.mod_rewrite가 css 및 js 파일을로드하지 않습니다.

이것은 내가 사용하고있는 조건 및 규칙입니다. 내가 www.example.com을 방문하고 잘로드 www.example.com/page하지만로드하려고 할 때이 페이지를로드 www.example.com/page/category하지만 할 수있는 경우에

RewriteEngine On 

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

RewriteRule ^(.*)$ index.php?params=$1 [QSA,L] 

내 문제입니다 CSS와 자바 스크립트를 찾으십시오./디렉토리 대신 page/css에서로드하려고 시도합니다.

내가 뭘 잘못했는지 생각해보십시오. 여기에 검색을했고, 몇 가지가

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

RewriteRule ^(images|css|javascript)(.*)$ index.php?params=$1 [QSA,L] 

하지만 그건 큰 차이가없는 것 같았다 추가 좋아 했어요.

답변

2

문제를 읽기위한

덕분에 자동 재 작성 다른 디렉토리 경로에서 페이지보고가 사실이라는 방문자의 웹 브라우저를 말하지 않을 것입니다.

그래서/page에 대한 요청은 이미지 및 CSS 파일과 마찬가지로 웹 서버의 최상위 공용 디렉토리에있는 리소스를보고 있다고 브라우저가 (올바르게) 생각합니다.

그러나/page/category에 대한 요청은 페이지라는 하위 디렉토리에있는 리소스를보고 있다고 생각하여 브라우저를 떠납니다 (잘못). 따라서 브라우저가 CSS 및 이미지 파일에 대한 요청을 보내면 실제로 존재하지 않는/page/하위 디렉토리에서 찾도록 서버에 요청합니다. 따라서 브라우저가 이미지와 CSS 파일을 가져 오려고하면 서버는 404 코드를 반환합니다.

이 문제를 해결하는 한 가지 방법은 CSS, 이미지 및 기타 페이지 참조 리소스의 경로를 절대 경로로 변경하는 것입니다. 정방향 슬래시로 시작하여 실제 최상위 공용 디렉토리에 상대적으로 정박되도록하십시오. 업데이트 할 리소스 경로가 적은 경우 진행하는 것이 가장 좋은 방법 일 수 있습니다. 예를 들어, 변경 :

src="image-name.png" 

이 상대 경로에 기초하여, 잘못된 위치를 절대 경로를 사용하여 파일을 요청하기보다는 추론 브라우저 강제

src="/image-name.png" 

로.

은 당신이 당신의 RewriteRule의를 변경할 수 있습니다하는한다 RewriteCond의 필요성을 제거하려면 다음

RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L] 

이 이미지와 CSS 파일에 대한 요청 때문에 기간 (점) 기호를 포함 아무것도 일치하지 않습니다 건너 뛴다.

1

그냥 base element을 사용하고 이미지 앞의 "/"를 제거하셨습니까?

관련 문제