2013-11-03 2 views
2

.htaccess 파일을 사용하여 모든 요청을 동일한 index.php으로 리디렉션합니다. 거기에서 들어오는 요청의 URL에 따라 수행 할 작업을 결정합니다.PHP에서 정적 파일을 반환하려면 어떻게해야합니까?

현재로서는 요청 URL을 source 폴더와 관련된 디렉토리 구조에 매핑하므로 example.com/user/createsource/user/create/index.php으로 매핑됩니다. 거기에 위치한 파일은 필요에 따라 요청을 처리하고 HTML 출력을 생성 할 수 있습니다.

정적 애셋에는 작동하지 않지만 브라우저가 요청할 수 있습니다. 그래서 내 생각은 요청 URL이 파일 확장자로 끝나는 지 알아 내고 assets 폴더에 상대적인 디렉토리 구조로 매핑하므로 example.com/css/default.cssassets/css/default.css으로 매핑됩니다. 하지만 PHP에서 HTML 코드 대신 정적 파일로 응답하는 방법을 모르겠습니다.

일반적으로 추가 .htaccess 규칙을 사용하여 수행 할 수 있지만 코드에서 동적으로 자산 폴더를 변경하고 싶습니다.

서버의 하드 드라이브에있는 정적 파일을 PHP의 브라우저 클라이언트로 보내려면 어떻게해야합니까?

+0

당신은 PHP를 사용하여 자산 (예를 들어, CSS 파일)을 렌더링 할 수 있지만,이 파일을 찍으 제공하는 것보다 훨씬 느리다 ically. 일반적으로 CSS가 변경되면 다시 작성하는 것이 좋습니다. – halfer

+0

아직도 명확하지 않지만 symfony2의 라우팅 구성 요소를 살펴볼 것을 제안합니다. 응답을 처리하는 일부 컨트롤러에 일부 요청 URL을 "첨부"하여 필요한 컨텐츠를 제공 할 수 있습니다 (http : // symfony .com/doc/current/components/routing/introduction.html) – Stormsson

+1

내 질문이 업데이트되어 제 의도가 분명 해졌기를 바랍니다. – danijar

답변

3

는 파일 경로의 시작 부분에/A를 넣어

/assets/path/to/file 
+0

PHP에서'assets' 디렉토리를 동적으로 변경하는 방법이 있습니까? 어쨌든, 나는 당신의 해결책을 사용할 것입니다. – danijar

+0

나는 당신이 .htaccess를 바꿀 때만 생각한다. –

+0

좋아, 나는'.htaccess'로 갈 것이다. 당신의 모범에 대해 한 가지 질문이 있습니다. 내부에 점들이있는 URL과 일치하지 않습니까? 나는'example.com/path.with.dots/page'와 같은 URL을 일치시키고 싶지 않습니다. 답장을 보내 주셔서 감사합니다. – danijar

2

정말로 원한다면 readfile()을 사용할 수 있습니다. 그러나 가능한 경우 웹 서버가 정적 파일을 처리하도록하는 것이 좋습니다. 문을 닫을 때 PHP를 실행하는 것보다 더 효율적입니다.

또한 PHP 접근 방식을 사용하면 파일 당 적절하게 Content-Type 헤더를 설정해야하므로 귀찮을 수 있습니다. 파일을 직접 제공 할 때 웹 서버가 이미이를 수행합니다.

플러스 거기에 당신이 고려해야 할 순간에 "무료"얻을 수 있습니다 - 당신이 페이지를 압축하려는 경우 ob_gzhandler을 사용하여 정적 파일에 대해 이미 수행되고있을 수 있습니다 아파치, 그렇지.

그럼에도 불구하고 때때로 바람직한 이유를 볼 수 있습니다. 일반적으로 동적이지 않은 파일에 대한 규칙보다는 예외를 처리하려고 할 것입니다 ...

하여 htacess

#Expections 
RewriteCond %{REQUEST_URI} ^/assets.*$ 
RewriteRule ^(.*)$ - [L,NC] 

#You redirect to index 
... 

+0

이 작업을 수행하는 라이브러리가 있습니까? 아니면 내 것을 만들겠습니까? – Subin

관련 문제