2012-08-28 3 views
1

다음 CakePHP 2 웹 사이트에 대한 .htaccess 파일이 있습니다.
webroot 폴더 아래에 넣습니다..htaccess가있는 일부 파일에 대한 액세스를 제한하는 CakePHP 사이트

매일 봇은 내 사이트에 WordPress 사이트로 로그인하려고합니다. 따라서 일부 파일 이름 (wp-login.php) 또는 관리자 또는 캐시와 같은 일부 디렉토리를 제한해야합니다. 내가 example.com/wp-login.php에 입력 할 때

  • 는하지만 "오류 : 내부 오류가 발생했습니다."수 CakePHP 예외 페이지.
  • "directory/administrator"또는 "directory/cache"의 주석을 제거 할 때마다 모든 페이지에서 403 오류가 발생합니다.

어떻게 파일 및 폴더를 제한 할 수 있습니까?

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> 
Order allow,Deny 
Deny from all 
</FilesMatch> 

<Files wp-login.php> 
    Order allow,deny 
    Deny from all 
</Files> 

#<Directory /Administrator> 
# Order allow,deny 
# Deny from all 
#<Directory> 

#<Directory /Cache> 
# Order allow,deny 
# Deny from all 
#<Directory> 


<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

#set file cache maximum age in seconds 
<ifmodule mod_headers.c> 
    <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$"> 
     Header set Cache-Control "max-age=518400, public" 
    </filesmatch> 
    <filesmatch "\.(js|css)$"> 
     Header set Cache-Control "max-age=604800, public" 
    </filesmatch> 
</ifmodule> 


# gzip files 
<ifModule mod_gzip.c> 
    mod_gzip_on Yes 
    mod_gzip_dechunk Yes 
    mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ 
    mod_gzip_item_include handler ^cgi-script$ 
    mod_gzip_item_include mime ^text/.* 
    mod_gzip_item_include mime ^application/x-javascript.* 
    mod_gzip_item_include mime ^application/javascript.* 
    mod_gzip_item_exclude mime ^image/.* 
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
</ifModule> 

# gzip files 
<ifModule mod_deflate.c> 
    <filesMatch "\.(css|js|x?html?|php)$"> 
    SetOutputFilter DEFLATE 
    </filesMatch> 
</ifModule> 

편집 : 리디렉션 코드를 변경했습니다. 디렉토리 문제는 해결되었지만 CakePHP 스타일 간격 서버 오류 예외는 여전히 존재합니다.

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> 
Order allow,Deny 
Deny from all 
</FilesMatch> 

<Files "wp-login.php"> 
    Order allow,deny 
    Deny from all 
</Files> 

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

    RewriteRule ^/?(administrator|cache|undefined) - [L,F,NC] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

답변

3

htaccess 파일 내에 <Directory> 블록을 사용할 수 없습니다. 난 당신이 WP-login.php에 대한 500 오류가 이유를 잘 모르겠지만, 당신은 선언에 어떤 따옴표를 추가해야되는 AdministratorCache 디렉토리에 개별 htaccess로 파일을

<Files "wp-login.php"> 
    Order allow,deny 
    Deny from all 
</Files> 

당신은 배치 할 수 있습니다 단지 :

Order allow,deny 
Deny from all 

아니면 재 작성 규칙 같은 것을 사용할 수 있습니다

RewriteRule ^/?(Administrator|Cache) - [L,F] 
+0

편집 질문을. 귀하의 의견과 함께 디렉토리 문제가 해결되었습니다. 파일 이름을 따옴표 안에 넣어도 wp-login 오류가 여전히 존재합니다. – trante

+1

@trante 여전히 문제가 보이지 않습니다. 글쎄, 어떤 경우 든 wp-login.php를 그 목록에 추가 할 수 있습니다 :'RewriteRule^/? (관리자 | 캐시 | 정의되지 않은 | wp-login \ .php) - [L, F, NC]' –

+0

마지막 코멘트가 내 문제를 해결했습니다. 그래서 나는 그것을 받아 들인다 :)) – trante

관련 문제