2011-10-25 3 views
2

이것은 CakePHP와 관련되어 있지만 다른 응용 프로그램에서는 일반적이라고 확신합니다..htaccess : 여러 .htaccess 파일이 어떻게 작동합니까?

http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess

A : :

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

B :

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

C

: 3 항에

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

있다 I이 페이지의 안내 이행 삼 .htaccess 파일. 간단하게하기 위해 A, B, C라고 부릅시다. 내 서버 (localhost XAMPP)에서 작동하는 것으로 보이지만 리디렉션 경로를 이해할 수 있는지 확실하지 않습니다. 내가 입력 한 주소가 무엇이든, 항상 가정 된대로 localhost \ cake \ users \ login으로 이동합니다.

내 응용 프로그램의 루트 디렉토리는 \ cake입니다. 나는 \ cake, \ cake \ app, cake \ app \ webroot와 A, B, C를 각각 가지고 있습니다. 위의 지시를 따른 후에 cake \ app의 코드가 실행됩니다. 위와 같이 .htaccess 파일을 올바르게 설정하기 전에 \ cake의 코드가 실행되고있었습니다. 이것은 내 데이터베이스가 설정되지 않았다는 것을 알려주므로이 파일이없는 것입니다.

실행하기 전에 누군가가이 응용 프로그램에서 "경로"를 차지하고 도울 수 있습니까? 모든 PHP 파일? 그것은 모든 경로를 cake \ app \ webroot로 리다이렉트하고 있으며, 리다이렉트가 .htaccess 파일을 넘어서 설정된다. (이 경우 케이크 \ 사용자 \ 로그인)

도움 주셔서 감사합니다!

추신 : 어떤 파일의 어느 부분이 사용자 로그인 페이지에 대한 모든 HTTP 요청으로 리디렉션되는지 아직 모르겠다는 것이 부끄럽습니다. 나는 이것을 잠시 전에 설정했고, 나는 그것에 막 돌아왔다. ACL 기능을 추가하는 CakePHP 요리 책 페이지의 두 번째 튜토리얼을 따르고 있다고 생각합니다.

+0

간단한 추적 방법 : 각각의 재 작성을 위해 URL에 추가 쿼리 매개 변수를 추가하십시오. 'RewriteRule ...? url = $ 1 & from = fileC' –

+0

마크, "..."가 다른 것으로 생각 되니? – musicliftsme

+0

예, 나머지는 재 작성 URL입니다. 모든 것을 붙여 넣기 만하면 게으르다. 중요한 비트는'& from = fileC' 쿼리 매개 변수를 추가하는 것입니다. –

답변

1

누군가가 차임하고이 응용 프로그램이 PHP 파일을 실행하기 전에 수행하는 "경로"를 도와 줄 수 있습니까? 그것은 모든 경로를 cake \ app \ webroot로 리다이렉트하고 있으며, 리다이렉트가 .htaccess 파일을 넘어서 설정된다. (이 경우 cake \ users \ login에)

즉, 예. 실제 작업을 수행하는 파일은 .htaccess이고 파일 이름은 "C"(/app/webroot/.htaccess)입니다. 이렇게하면 기존 파일이나 디렉토리가 아닌 모든 요청이 index.php으로 전달되어 CakePHP를 부트 스트랩하고 요청을 처리합니다. 추가 리디렉션은 CakePHP's routing에 의해 처리됩니다.

편집 : 로그인 페이지로 리디렉션 기능에 대한 질문을 해결하기 위해, 기회는 당신이 Auth component를 구성하고 $this->Auth->allow()을 통해 어떤 "공개"페이지를 설정하지 않은 있습니다.


다른 두 거기 경우에 당신은, 예를 들어 CakePHP의 설치 디렉토리 또는 페이지를 제공 아파치에서 사용하는 폴더에 응용 프로그램 디렉토리를 넣어 /var/www/html 또는 유사합니다.

/cakephp-1.3.x/.htaccess ("A")

/cakephp-1.3.x/app/.htaccess ("B : 당신은 구조임을 알게 될 것이다

그래서 끝날 이러한 수준의에서 어떤 요청이 재 처리되고 ")

/cakephp-1.3.x/app/webroot/.htaccess ("C ") "C"의 writeRule. 데이터베이스 연결 정보와 같은 중요한 데이터를 보호하고 응용 프로그램이 제대로 작동하는지 확인하기 위해 수행됩니다 (모든 요청은 사용자 지정 라우팅을 설정하지 않는 한 CakePHP 부트 스트 래퍼를 통과해야합니다).

+0

정말 고맙습니다 저스틴! 당신 말이 맞아요.cake \ app \ app_controller.php에 Auth 구성 요소가 있고 BeforeFilter가 로그인 페이지와 작동 중입니다. 나는 명확한 설명에 감사드립니다. 그것은 합리적이다. – musicliftsme

1

다음 줄은 모든 것을 Cake 구조 인 인덱스 페이지로 리디렉션합니다.

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

귀하의 경우 리다이렉션이. 웹 루트 htaccess는 단순히 모든 것을 색인 페이지로 파이프합니다.

그러나 색인 페이지를 확인해보십시오. 해당 페이지의 컨트롤러에는 들어오는 인수에 대한 기본 절이있을 수 있습니다. 따라서 매개 변수가 알려지지 않은 URL을 입력하면 색인 페이지에 로그인 화면이 표시됩니다.

그건 내 두 센트입니다. 그러나 CakePHP를 실험으로 만 사용했기 때문에 내가 틀렸다면 더 많은 경험을 가진 사람이 나를 고칠 수 있어야합니다.

+0

입력 점심 식사 317 주셔서 감사합니다. 위와 같은 htaccess 설정을하지 않았고 localhost/cake에 갔을 때 설정 파일이없는 \ cake 디렉토리에서 파일을 읽었습니다. 예 : cake \ app \ database.php에 올바른 것이있을 때 cake \ database.php를 보았습니다. 나는 cake \ app \ webroot \ index.php가 모든 요청이 현재 A, B, C 설정으로 리다이렉트되는 파일임을 본다. – musicliftsme

+0

흠,이 index.php 파일을 자세히 살펴 보겠습니다. 나는 그것을 (다운로드에서 그대로 사용하여) 수정했다고 생각하지 않는다. – musicliftsme

1

응용 프로그램에서 Auth 구성 요소를 사용하기 때문에 문제가 발생했다고 생각합니다. cakephp의 Acl 구성 요소 부분에 시도해 보았던 부분에 Auth 구성 요소가 사용되었습니다. 요청 된 컨트롤러에 Auth 구성 요소가 포함되어있는 경우, 다른 loin 메소드가 지정되지 않은 경우 cakephp는 기본적으로/users/login으로 리디렉션됩니다. 그래서 htaccess 여기에 문제가 발생하지 않는 것 같아요.

+0

당신은 Auth 구성 요소에 대해 옳습니다! 고맙습니다! – musicliftsme

관련 문제