2013-06-30 3 views
0

나는 mod_rewrite의 작동 방식을 이해할 수 없다고 생각하는 지점에 왔습니다. 이론적으로 나는 그것을 얻었다 고 생각하지만, 단지이 일을 할 수없는 것처럼 보입니다. 나는 다음과 같은 파일 구조가 : 슬프게도또 다른 아파치의 mod_rewrite 패배 한 남자

code 
    -application/ 
    -bundles/ 
    -laravel/ 
    -public/ 
     -css/ 
     -js/ 
     -img/ 
     -index.php 
    -storage/ 
    -.htaccess 

을 내 httpd.conf 가상 호스트 구성이 있습니다

<Directory path/to/code> 
Options Indexes FollowSymLinks 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
</Directory> 

DocumentRoot path/to/code 

<IfModule dir_module> 
DirectoryIndex index.php 
</IfModule> 

그리고 코드/대중를 가리 키도록 수정할 수 없습니다/그래서 내가 고칠 수 있다고 생각 그것과 함께 .htaccess. 이제 모든 것을 시도했습니다. 기본적으로 제가하고 싶은 것은 변환해야하는 css, js, img 제외하고, /public/index.php/($1)에 모든 요청을 변환 할 수 있습니다 : 그래서

/public/css/($1) 
/public/img/($1) 
/public/js/($1) 

내가 example.com/있는 경우이 그들의 CSS, IMG를 example.com/public/index.php으로 변경됩니다, JS 등 example.com/public/css로 변경 것 , img, js.

난 그냥 그것을 :(

.htaccess 취한 여러 형태를 할 수 없어, 최근에 나는 모든 것을 포기하고 그냥 다음과 같을 수 :

물론
<IfModule rewrite_module> 
    RewriteEngine on 
    RewriteRule ^(.*)$ /public/index.php/$1 
</IfModule> 

이, 줘 500 내부 서버 오류 (다시 말해서 나에게 명확하지는 않지만 그래도 명확한 루프가 아닙니다)

그래서 내 생각은입니다.(의사 코드) :

<IfModule rewrite_module> 
    RewriteEngine on 

    RewriteCond %{REQUEST_URI} ^/css 
    RewriteRule ^css/(.*)$ /public/css/$1 

    RewriteCond %{REQUEST_URI} ^/img 
    RewriteRule ^img/(.*)$ /public/img/$1 

    RewriteCond %{REQUEST_URI} ^/js 
    RewriteRule ^js/(.*)$ /public/js/$1 

    RewriteRule ^(.*)$ /public/index.php/$1 
</IfModule> 

어떤 생각을 어떻게 할 수 있습니까? 나는 내가 뭘 잘못하고 있는지 조금 이해하고 싶다. 나는 좋은 글을 쓰는 방법을 알아 내려고한다. mod_rewrite.htaccess 파일.

저는 Windows 7, Apache2.2입니다.

미리 감사드립니다.

+0

RewriteRules 끝 부분에 [L] 옵션이 있어야 mod_rewrite가 처리 규칙을 종료하고 처리하는 것을 알 수 있다고 생각합니다. – HeatfanJohn

+0

그건 작동하지 않습니다. 'L' 플래그는 현재 실행을 멈추지 만 다시 작성된 모든 경로는 시작부터 .htaccess 파일을 통해 다시 돌아 가야합니다. – Bobulous

답변

1

모든 재 작성된 경로가 httpd.conf 및 .htaccess 지시어를 통해 맨 위로 돌아 가야하기 때문에 무한 루프가 발생합니다. L 플래그가 제안되는 경우가 많지만 현재 실행을 중지하도록 Apache에 알립니다. 그것은 위로부터 지시어를 거쳐야하는 완료된 재기록 경로를 멈추지 않습니다.

"/ public"으로 다시 쓰려면 RewriteCond를 추가하여이 다시 쓰기가 아직 수행되지 않았는지 확인해야합니다. 그렇지 않으면 매회 다시 쓰기가 발생하고 무한 루프가 발생합니다.

은 "공공"재 작성을 위해 일한다고 :.

RewriteCond %{REQUEST_URI} !^/public/ 
RewriteRule (.*) /public/$1 

이 요청 된 경로가 이미 /public/로 시작하지 않는 경우 자동으로 그것에 /public/을 앞에 추가하는 요청을 다시 "라고

주변 장치 파일 요청 (CSS, 이미지 등)으로 무엇을하려하는지 명확하지 않습니다.당신이 /public/css/page.css가 될 /public/page.css에 대한 요청을 원하는 경우 다음 해야지 그것을 할 수 있습니다 :

RewriteRule ^public/([^/]+)\.css$ /public/css/$1.css 

을 그러나, 나는이 일에 혜택을 확인할 수 없습니다. 페이지 스크립트 나 정적 HTML 페이지를 업데이트하고 CSS 및 이미지 파일에 사용할 새로운 경로 구조를 반영하도록 변경하는 것이 더 좋습니다. mod_rewrite를 사용하여 페이지의 경로를 업데이트하지 않는 것은 좋지 않은 아이디어이며, 서버 부하가 더 커지고 요청 응답이 느려질 수 있습니다.

mod_rewrite에 대한 자세한 내용은 Apache mod_rewrite manual page을 참조하십시오.

+0

답해 주셔서 감사합니다. 제안 사항은 모든 요청 앞에'/ public /'을 추가 할 때 유용했습니다. 문제는'/ public /'이'css | js | img'가 나오면 아무것도하지 말고,'/ public/index.php/$ 1'는 내가 자신을 설명 했는가하는 것입니다. –

+0

아니요, 저는 CSS 및 이미지/js 파일에 관해서 당신이 성취하고자하는 것에 대해 아직 명확하지 않습니다. – Bobulous