2010-05-04 8 views
3

Fedora 10의 Apache/2.2.14에 대한 적절한 다시 쓰기 규칙을 만드는 데 상당한 어려움을 겪고 있습니다. CodeIgniter-Doctrine tutorial을 사용하고 있습니다. .htaccess 파일. (을 검색하십시오 CodeIgniter URL에서 "index.php"를 제거하면이 약 10 % 감소합니다.) 그러나 프로덕션 서버에는 권장되지 않으므로이 파일을 /etc/httpd/conf/httpd.conf에서 작동하도록 조정하려고합니다. .apache 일부 경로 수정을위한 httpd.conf의 mod_rewrite 규칙

<VirtualHost *:80> 
    ServerName ci_doctrine 
    DocumentRoot /var/www/html/ci_doctrine 
    ErrorLog /var/log/httpd/cid-error_log 
    CustomLog /var/log/httpd/cid-access_log common 
     <IfModule mod_rewrite.c> 
       RewriteEngine on 
       RewriteLog /var/log/httpd/cid_rewrite 
       RewriteLogLevel 9 

#    RewriteCond ^/css/style.css$ (these have bad syntax, but that's beside the point) 
#    RewriteRule ^/css/style.css$ /css/style.css [L] 

       RewriteCond %{REQUEST_FILENAME} !-f 
       RewriteCond %{REQUEST_FILENAME} !-d 
       RewriteRule ^(.*)$ /index.php/$1 [L] 
     </IfModule> 
     <IfModule !mod_rewrite.c> 
       ErrorDocument 404 /ci_doctrine/index.php 
     </IfModule> 
</VirtualHost> 

튜토리얼 htaccess로 규칙이 제대로 기존 파일을 테스트 한 후 이러한 경우에 URL을 변경하지 것처럼 보이지만, 재 작성 로그는 조건 (즉, 파일이 존재하지 않음)에 해당하는 것을 말한다 그것이 거기에 있어도.

127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) init rewrite engine with requested uri /login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (3) applying pattern '^(.*)$' to uri '/login' 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (4) RewriteCond: input='/login' pattern='!-f' => matched 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (4) RewriteCond: input='/login' pattern='!-d' => matched 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) rewrite '/login' -> '/index.php//login' 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) local path result: /index.php//login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) prefixed with document_root to /var/www/html/ci_doctrine/index.php/login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (1) go-ahead with /var/www/html/ci_doctrine/index.php/login [OK] 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) init rewrite engine with requested uri /login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (3) applying pattern '^(.*)$' to uri '/login' 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (4) RewriteCond: input='/login' pattern='!-f' => matched 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (4) RewriteCond: input='/login' pattern='!-d' => matched 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) rewrite '/login' -> '/index.php//login' 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) local path result: /index.php//login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) prefixed with document_root to /var/www/html/ci_doctrine/index.php/login 
127.0.0.1 - - [03/May/2010:23:26:56 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (1) go-ahead with /var/www/html/ci_doctrine/index.php/login [OK] 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) init rewrite engine with requested uri /css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (3) applying pattern '^(.*)$' to uri '/css/style.css' 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (4) RewriteCond: input='/css/style.css' pattern='!-f' => matched 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (4) RewriteCond: input='/css/style.css' pattern='!-d' => matched 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) rewrite '/css/style.css' -> '/index.php//css/style.css' 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) local path result: /index.php//css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (2) prefixed with document_root to /var/www/html/ci_doctrine/index.php/css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#167e8e0/initial] (1) go-ahead with /var/www/html/ci_doctrine/index.php/css/style.css [OK] 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) init rewrite engine with requested uri /css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (3) applying pattern '^(.*)$' to uri '/css/style.css' 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (4) RewriteCond: input='/css/style.css' pattern='!-f' => matched 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (4) RewriteCond: input='/css/style.css' pattern='!-d' => matched 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) rewrite '/css/style.css' -> '/index.php//css/style.css' 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) local path result: /index.php//css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (2) prefixed with document_root to /var/www/html/ci_doctrine/index.php/css/style.css 
127.0.0.1 - - [03/May/2010:23:26:58 --0700] [ci_doctrine/sid#13c1868][rid#16848f8/subreq] (1) go-ahead with /var/www/html/ci_doctrine/index.php/css/style.css [OK] 

파일 ...//있는 style.css 나는 재 작성 규칙과 장난을 시작하기 전에 올바른 장소에 있어야하므로, 제대로 작동 된 CSS. 하지만 이제는 index.php 아래의 가상 컴포넌트가 제대로 변환되었지만 항상 재 작성을 통해 경로가 정해집니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

#    RewriteCond ^/css/style.css$ (these have bad syntax, but that's beside the point) 
#    RewriteRule ^/css/style.css$ /css/style.css [L] 

이 규칙의 후자 (즉 아무것도하지 않습니다) 같은 주소로 재 작성, 스타일 시트에 대한 요청을 인식하여 내가 마지막이다 "상태 :

답변

3

것은이 작업을 얻으려면, 정말 좋아한다 RewriteCond 문을 변경했다 나에게는 항상 경로의 DocumentRoot 부분이 누락되었습니다. 즉, 'file exists'테스트는 항상 false가됩니다.

어쩌면 아파치 버그 일 수도 있고 설명서 오류 일 수도 있습니다. 나는 그 부분을 모른다. http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

+0

좋은 해결책. 감사. – wallyk

0

당신은이 규칙을 주석 처리했습니다 규칙 "- 일치 할 때 더 이상의 규칙이 실행되지 않아 나중에 발견되는 규칙에 일치하지 않게됩니다.

이 줄의 맨 처음부터 #을 삭제하면 style.css 파일이 다시 작동하지만 주소 변환을 수행하는 좋은 방법은 아니지만 모든 파일에 대해 비슷한 규칙을 추가해야하므로 당신은 다시 쓰고 싶지 않습니다.

+0

나는 아파치가 다시 시작하는 것을 막았 기 때문에 그것들을 주석 처리했다. 오류 메시지는 다음과 같습니다.'/etc/httpd/conf/httpd.conf의 1022 행의 구문 오류 : RewriteCond : 잘못된 인수 행 '^/css/style.css $' ' – wallyk

0

RewriteCond가 잘못되어 (어쨌든 RewriteCond %{REQUEST_URI} ^/css/style.css$이어야 함) 불필요하므로 style.css에 대한 RewriteRule의 주석 처리를 제거하십시오.

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

REQUEST_FILENAME에 대한 설명서를 말한다 "파일 또는 스크립트 요청을 일치에 대한 전체 로컬 파일 시스템 경로"하지만에 대한 :

관련 문제