htaccess 파일은 영향을 미치는 서버 설정을 변경합니다. htaccess 파일: 애플리케이션, 포함, 구성

우리는 Apache httpd를 메인 웹 서버로 사용하고 있습니다. Apache는 전 세계 대부분의 웹 서버를 구성하는 데 사용되며 동급 제품 중 가장 방대한 제품입니다. 이 서버는 고도로 구성 가능하고 매우 유능하며 웹 서버 실행에 대해 알려진 모든 프로토콜을 지원합니다. 특히 Apache의 경우 Perl, PHP와 같은 인기 프로그래밍 언어의 버전이 생성되었으며 이 서버는 널리 사용되는 DBMS(예: MySQL)와도 쉽게 통합됩니다.

주요 프로젝트 사이트는 httpd.apache.org 이고 버전 1.3.xx에 대한 주요 문서는 httpd.apache.org/docs/ 에서 볼 수 있습니다.

에서 적절한 지시문을 사용하여 Apache를 자체 구성할 수 있는 기능을 사용자에게 제공합니다. 이렇게 하면 대량 호스팅 환경에서 웹 서버를 구성하는 대부분의 작업을 해결할 수 있습니다.

색인 파일

인덱스 파일 또는 인덱스 파일은 사용자가 특정 파일이 아닌 웹을 통해 디렉토리에 접근할 때 기본적으로 열리는 파일입니다. 예를 들어 방문자가 주소를 요청할 것입니다. http://your_domain/price/, 여기서 price는 카탈로그의 이름입니다. 인덱스 파일은 이름을 지정하지 않고 디렉토리에 접근할 때 사용자에게 보여지는 파일이다. 특정 파일그 안에.

기본 색인 파일은 index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm 또는 default.html입니다. 다른 파일을 먼저 열려면 현재 값을 재정의해야 합니다. 방법을 읽으십시오.

.htaccess 파일의 목적 및 사용

파일 .ht액세스(파일 이름의 첫 번째 문자는 점입니다)는 호스팅 최종 사용자 측에서 Apache 웹 서버를 제어하는 ​​데 사용됩니다. 웹 서버가 수락하고 처리하는 이 파일에 지시문을 넣어 사용자가 지정한 설정에 따라 작업을 수행합니다.

.htaccess 파일은 웹 서버의 루트 디렉토리(디렉토리에 직접 www). 이 경우 이러한 .htaccess의 지시문은 전체 웹 서버에 유효합니다. 또한 .htaccess는 서버의 특정 하위 디렉터리에 있을 수 있습니다. 그런 다음 이 파일에 지정된 지시문은 디렉터리에 있는 "메인" 파일의 지시어 작업을 "재정의"합니다. www또는 더 높은 수준의 디렉토리에 있습니다. 즉, .htaccess의 지시문 효과는 위에서 아래로 상속되지만 그 반대는 아닙니다. 파일에 대한 변경 사항은 즉시 적용됩니다. 이는 Apache 웹 서버에 액세스할 때마다 .htaccess의 정보를 다시 읽기 때문입니다.

사용 가능한 대부분의 웹 서버 지시문은 .htaccess에 배치할 수 있습니다. Context 필드에 .htaccess에 대한 언급이 없는 지시문은 이 구성 파일에서 사용할 수 없습니다. AddType 지시문을 예로 사용하면 Context 필드에 .htaccess 에 대한 언급이 포함되어 있으므로 사용할 수 있습니다.

필요한 지시문을 사용하지 않고 .htaccess 에 지시문을 추가한 후 오류가 발생한 경우 공유 호스팅 조건에서 명령 사용이 금지될 가능성이 큽니다. 기술 지원에 편지를 보내주시면 도와드리겠습니다. 문제를 자세히 설명하고 이 지시문을 사용하여 달성하고자 하는 목표를 표시하십시오.

웹 애플리케이션 방화벽

웹 사이트에 대한 공격을 감지하고 방지하려면 웹 응용 프로그램 방화벽(ModSecurity)이 필요합니다. 체크는 정해진 규칙에 따라 진행되며, 통과하지 못하면 에러(403 금지)로 사이트 요청이 거부된다.

오탐의 경우 아래 옵션을 사용하여 .htaccess를 통해 규칙을 비활성화할 수 있습니다.

  • SecRuleRemoveById - ID로 규칙 제거
  • SecRuleRemoveByTag - 태그별로 규칙을 제거합니다.

오류 로그 error.log에서 비활성화해야 하는 규칙을 결정할 수 있습니다.

ID로 비활성화하는 예:

SecRuleRemoveById 933100 933150

태그로 비활성화하는 예:

SecRuleRemoveByTag "공격 주입-php" SecRuleRemoveByTag "CWAF"

인코딩 재정의:

기본적으로 웹 서버는 서버에서 호스팅되는 모든 html 문서를 windows-1251 인코딩으로 "제공"합니다. 웹 서버가 정보를 "제공"하는 인코딩 유형을 변경할 수 있습니다. 개인 계정.

이렇게 하려면 서비스 트리 섹션으로 이동하여 인코딩 유형을 변경할 도메인을 선택하십시오. 다음으로 매개변수 목록에서 행을 찾습니다. 인코딩(기본값)그리고 클릭 추가하다아래 그림과 같이.

.htaccess 파일을 사용하여 인코딩을 변경할 수도 있습니다. 이렇게하려면 행을 추가하십시오.

AddType "텍스트/html; charset=koi8-r" .html .htm .shtml

이러한 .htaccess를 수신하면 Apache 웹 서버는 문서에 koi8-r 인코딩이 있음을 나타내는 헤더를 클라이언트 브라우저에 발행합니다.

리소스에 다른 인코딩(ISO-8859-1, Windows-1250, Windows-1252, UTF-8)의 html 문서가 있는 경우 windows-1251 인코딩으로 헤더의 강제 출력을 비활성화해야 할 수 있습니다. 이를 위해 .htaccess에 다음 줄이 추가됩니다.

AddDefaultCharset 끄기

이 경우 해당 인코딩은 태그 형태로 각 html 페이지에 작성되어야 합니다.

예: 비밀번호로 디렉토리를 잠그는 방법

.htaccess가 해결하는 일반적인 작업 중 하나는 서버의 특정 디렉토리에 대한 액세스를 제한하는 것입니다. 예를 들어 개별 방문자에게 특정 디렉토리에 대한 액세스 권한을 부여하는 동시에 고유한 로그인 및 비밀번호를 제공해야 합니다.

암호로 액세스를 제한하려는 디렉터리에서 다음 지시문을 사용하여 .htaccess 파일을 만듭니다.

AuthType 기본 AuthName "일부 이름" AuthUserFile /home/ uXXXXX/.htpasswd는 유효한 사용자가 필요합니다

/홈/uXXXX/.htpasswd서버 디스크에 있는 암호 파일의 전체 경로를 나타냅니다. 예를 들어 .htpasswd 파일(비밀번호가 포함됨)을 FTP를 통해 서버에 연결하는 홈 디렉토리에 배치하면 이 파일의 경로는 다음과 같습니다. /홈/uXXXX/.htpasswd, 어디 uXXXXX- 가상 사이트의 이름(예: u12345).

AuthUserFile 지시문에서 로그인/비밀번호를 사용하여 파일의 절대 경로를 지정합니다. 이 경로는 나중에 만들 것입니다. 다음을 사용하여 서버에서 직접 대신 컴퓨터에서 .htaccess 파일을 만드는 경우 텍스트 에디터, .htaccess는 FTP를 통해 전송되어야 합니다. 엄격하게 텍스트(ASCII) 모드에서.

암호 파일을 만듭니다. 암호 파일에는 다음과 같은 줄이 포함되어야 합니다. 로그인 비밀번호. 암호는 MD5 알고리즘을 사용하여 암호화해야 합니다. 그러한 파일을 만드는 한 가지 방법은 Apache와 함께 제공되는 프로그램 - htpasswd를 사용하는 것입니다. /usr/local/bin/, 전체 경로 - /usr/local/bin/htpasswd).

서버에서 직접 유닉스 셸에서 암호 파일을 만드는 방법을 고려하십시오. 쉘로 이동하여 다음 명령을 실행하겠습니다.

  • htpasswd -mbc .htpasswd user1 sNQ7j9oR2w만들다 새로운 파일.htpasswd, 여기에 지정된 비밀번호로 user1 사용자에 대한 항목을 추가합니다. 명령줄. 요구 필연적으로 sNQ7j9oR2w를 자신의 비밀번호로 바꾸십시오. 이 비밀번호는 예를 들어 여기에만 제공됩니다.
  • htpasswd .htpasswd user2는 user2의 기존 .htpasswd 파일에 추가되고 해당 프로그램 요청에 대한 응답으로 암호를 수동으로 입력

Windows를 사용 중이고 유닉스 셸을 사용하여 암호를 생성하지 않으려면 htpasswd 프로그램의 Windows 버전을 다운로드하고 컴퓨터에 암호 파일을 만든 다음 서버에 업로드할 수 있습니다. Windows 버전의 Apache가 이미 설치되어 있는 경우 파일 htpasswd.exe카탈로그에서 찾을 수 있습니다 프로그램 파일\아파치 그룹\아파치\bin\.

따라서 htpasswd.exe를 가져와 다음과 같은 암호를 생성하는 데 사용합니다.

  • htpasswd.exe -mc .htpasswd 사용자1새 암호 파일 htpasswd.exe를 만들면 암호와 확인이 대화식으로 요청됩니다.
  • htpasswd.exe -m .htpasswd 사용자2암호를 대화식으로 요청하여 사용자 user2를 기존 htpasswd.exe 암호 파일에 추가합니다.

모든 로그인이 끝나면 파일을 서버에 업로드해야 합니다.

예: 인덱스 파일 재정의

상황: 사용자가 디렉토리에 액세스했습니다. http://www.your_domain.ru/price/.이러한 요청으로 가장 먼저 열리고 표시됩니다. 인덱스 파일을 재정의하고 첫 번째로 열 파일이 index.htm이 아니라 예를 들어 파일이 되도록 만들려면 myindex.php, 다음 지침을 적절한 디렉토리의 .htaccess 파일에 배치하여 이를 수행할 수 있습니다.

디렉토리 인덱스 myindex.php

이러한 콘텐츠가 포함된 .htaccess를 수신하면 Apache 웹 서버는 기본적으로 파일을 엽니다. myindex.php.

예: 목록 발행 금지 및 허가

디렉토리에 파일이 없는 경우 디렉토리에 있는 파일 목록(디렉토리 목록)을 표시해야 하는 경우가 있는데 기본적으로 표시됩니다. 이렇게 하려면 .htaccess에 다음 줄을 추가합니다.

옵션+인덱스

.htaccess 파일은 목록을 허용하려는 디렉토리에 정확히 생성되어야 합니다. 이 지시문은 모든 하위 디렉터리에도 영향을 미칩니다(이는 가상 호스트 설정에서 기본적으로 활성화된 지시문에 의해 달성됩니다. 모두 재정의 허용).

이 지시문은 기본적으로 활성화되어 있습니다. 옵션-인덱스그리고 만약 당신이 얻을 경우 HTTP 오류 403.

파일 이름의 인코딩이 올바르게 표시되지 않으면 Charset 속성을 사용하여 올바른 인코딩을 지정하십시오. 예를 들어 키릴 문자를 UTF-8 인코딩으로 표시하려면 .htaccess 파일에 다음 명령을 추가하십시오.

IndexOptions 문자 집합=UTF-8

예: 사용자 정의 오류 페이지

예: 특정 IP 주소의 액세스 거부

때때로 특정 IP 주소에서 사이트 또는 그 일부에 대한 액세스를 금지해야 합니다.

이 경우 원하는 디렉토리에 지시문이 있는 .htaccess 파일을 생성해야 합니다. 예를 들어, IP 주소 172.16.16.16에서 액세스를 거부하려면:

172.16.16.16부터 모든 거부에서 주문 허용, 거부 허용

이제 IP 주소에서 사이트에 액세스하려고 할 때 172.16.16.16 방문자는 403 오류 또는 해당 오류에 대한 귀하의 페이지를 받게 됩니다.

양식에서 주소의 일부 지정 172.16.16 서브넷에서 액세스 제한 172.16.16/24.

때로는 반대의 작업을 수행하고 귀하의()를 제외한 모든 IP에 대해 사이트에 대한 액세스를 차단해야 합니다. 예를 들어, IP 주소 172.16.16.16에 대한 액세스만 허용하려면 .htaccess 파일에 다음 명령문을 추가하십시오.

172.16.16.16부터 주문 허용, 거부 허용

자세한 문서는 Apache 문서를 참조하십시오.

예: 특정 파일에 대한 액세스 제한

때로는 특정 파일에 대한 액세스를 거부해야 합니다. 예를 들어 데이터베이스, 인터페이스 등에 대한 액세스 세부 정보가 포함된 구성 파일 파일로 말해보자 구성.cfg데이터베이스에 액세스하기 위한 로그인/비밀번호를 저장합니다. 지시문을 사용하여 이 디렉터리에 .htaccess 파일을 만듭니다.

주문 허용, 거부 모두 거부

이제 방문자가 브라우저에 다음과 같이 입력하면 http://www.your_domain.ru//config.cfg, 403 오류 또는 해당 오류에 대한 페이지가 표시됩니다.

예: 마지막으로 수정된 헤더

어떤 경우에는 웹 서버가 HTTP 헤더를 발행해야 합니다. 마지막 수정. 예를 들어 Yandex에 리소스를 등록할 때 " 잘못된 날짜»라는 오류가 발생합니다. 정적 문서의 경우 서버는 항상 마지막으로 수정한 값을 반환합니다. 이것은 html 파일에 유효합니다. SSI의 경우 서버는 "XBitHack full" 지시문이 지정되고(이 줄을 .htaccess에 작성) 그룹의 "실행 가능" 속성이 액세스되는 파일에 대해 설정된 경우 마지막으로 수정된 값을 반환합니다. 스크립트에서 last-modified는 다른 방법으로 반환됩니다. 예를 들어, PHP 스크립트가 코드를 동적으로 생성한다고 가정할 때 last-modified를 제공하는 것이 가장 논리적일 것입니다. 현재 날짜그리고 시간./>

이것은 다음과 같이 구현됩니다.

주의: 명령 헤더스크립트가 html 텍스트를 사용자의 브라우저에 출력하기 시작하기 전에 php 스크립트에서 실행되어야 합니다.

해결책
  • htaccess 파일 구문
  • htaccess 액세스 구성
  • htaccess에서 URL 수정
  • htaccess에서 리디렉션 설정
  • htaccess에서 오류 페이지 구성
  • htaccess에서 캐싱
  • htaccess에서 파일 압축
  • 비밀번호 잠금 디렉토리
  • 부호화
  • 원하는 폴더의 PHP 버전 및 파일 유형별 핸들러 변경

HTACCESS 파일 구문

htaccess 파일의 모든 지시문은 전역 구성 파일에 배치된 것과 동일한 방식으로 실행되며 지시문 내부에서만 실행됩니다. . 이렇게 하면 전역 설정을 변경할 수 없지만 액세스 권한이 있는 폴더에서 프로그램 동작을 미세 조정할 수 있습니다.

지시문의 일반 구문은 매우 간단합니다. 예를 들어 다음과 같이 명령과 옵션이 공백으로 구분되어 있습니다.

명령 매개변수1 매개변수2 깃발

명령 자체가 많이 있으며 수행하는 작업의 예를 사용하여 명령을 고려할 것입니다. 명령 자체 외에도 중첩 구조를 여기에서 사용할 수 있습니다. 예를 들어 모듈을 활성화하거나 특정 모듈의 가용성을 확인하는 데 사용할 수 있습니다. 이제 수행 방법에 대해 자세히 살펴보겠습니다. 올바른 설정 htaccess. 가장 간단한 단계부터 시작하겠습니다.

cPanel 데스크탑으로 이동하여 " 파일 관리자"

public_html 폴더로 이동하여 ".htaccess"라는 파일을 만듭니다.

public_html 폴더 이상에 원하는 폴더와 .htaccess 파일을 생성합니다.

디스플레이 켜기 숨겨진 파일, 오른쪽 상단의 '설정' 섹션에서

파일을 마우스 오른쪽 버튼으로 클릭하고 편집을 선택하여 .htaccess 파일을 편집합니다.

HTACCESS 액세스 설정

꽤 자주 htaccess는 폴더에 대한 액세스를 제어하는 ​​데 사용됩니다. 액세스 제어에는 세 가지 명령이 사용됩니다.

  • 주문하다- 주문하다;
  • 부인하다- 금지하다;
  • 허용하다- 허용하다.

먼저 order 옵션을 사용하여 지시문이 실행되는 순서를 지정해야 합니다. 이 명령만 중요하며 파일에 있는 순서는 중요하지 않습니다.

그런 다음 허용 또는 거부 지시문을 사용하여 특정 주소에서 폴더에 대한 액세스를 허용하거나 거부합니다. 예를 들어, htaccess에 추가해야 하는 모든 것을 비활성화하려면:

주문 거부, 허용
모두 거부

그러나 원하는 서브넷 또는 IP 주소에서만 액세스를 허용할 수도 있습니다.

주문 거부, 허용
모두 거부
192.168.0을 허용합니다.

cPanel을 사용하여 IP 주소를 차단할 수 있습니다.


거부, 허용이 지정되면 해당 순서로 검사가 수행됩니다. 먼저 모든 거부 지시문, 모든 허용 지시문, 일치하는 조건이 없으면 요청을 건너뜁니다. 허용, 거부를 사용하면 이러한 요청이 기본적으로 거부됩니다. 예를 들어 이전 예제는 다음과 같이 작성할 수 있습니다.

주문 허용, 거부
192.168.0을 허용합니다.

HTACCESS의 URL 수정

htaccess의 가장 일반적인 용도는 런타임 또는 리디렉션 시 URL을 수정하는 것입니다. mod_rewrite 모듈은 이 기능을 담당하며 일반적으로 대부분의 Apache 구성에서 활성화됩니다.

htacces의 URL 수정은 세 가지 지시문을 사용하여 수행됩니다. RewriteBase, 주소 접두사를 지정합니다. 다시 쓰기 조건규정 준수를 확인하고 RewriteRule- 모든 일치 규칙이 일치하는 경우 정규식에 따라 URL을 변경합니다.

먼저 모듈이 아직 활성화되지 않은 경우 Mod_Rewrite를 활성화해야 합니다.

재작성 엔진 켜기

루트가 URL의 접두사로 사용되어야 함을 지정합니다.

그리고 index.html에서 index.php로 주소의 URL을 자동으로 교체합니다. 원래 URL은 htaccess 파일의 위치에 상대적인 요청된 파일의 경로입니다.

RewriteRule index.html /index.php

보다 효율적인 대체를 위해 특수 문자와 변수, 일반 문자와 숫자로 구성된 정규식을 사용할 수 있습니다. 주요 고려 특수 기호:

  • ^ - 라인의 시작;
  • $ - 줄 끝;
  • . - 모든 문자;
  • * - 임의의 수의 문자;
  • ? - 하나의 특정 기호;
  • - 문자 시퀀스(예: 0에서 9까지)
  • | - 기호 또는, 한 그룹 또는 다른 그룹이 선택됩니다.
  • () - 문자 그룹을 선택하는 데 사용됩니다.

htaccess 정규식에서 다음과 같이 요청 헤더에서 가져온 데이터와 함께 변수를 사용할 수도 있습니다.

  • %(HTTP_USER_AGENT)- 사용자의 브라우저에 의해 전송되는 User-Agent 필드
  • %(REMOTE_ADDR)- 사용자의 IP 주소
  • %(REQUEST_URI)- 요청된 URI;
  • %(QUERY_STRING)- 기호 ? 뒤의 쿼리 매개변수.

이것들은 가장 일반적으로 사용되는 변수이지만 더 많은 변수가 있으며 나머지는 공식 문서에서 찾을 수 있습니다. 정규식은 더 많은 가능성을 열어줍니다. 예를 들어 모든 페이지에서 html을 php로 바꿀 수 있습니다.

다시 쓰기 엔진 켜기;
RewriteBase /;

RewriteCond 지시문은 더 많은 유연성을 제공하며 수정 사항을 적용할 주소를 선택할 수 있습니다. 예를 들어 www 버전에 대해서만 데이터를 재정의합니다.

RewriteBase /;
RewriteCond % (REMOTE_HOST) ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php

이렇게 하면 실제로 리디렉션하지 않고도 URL에서 모든 종류의 변환을 수행할 수 있습니다. 하지만 그런 다음 리디렉션을 수행하는 방법을 살펴보겠습니다.

HTACCESS에서 리디렉션 설정

http 에서 https 로의 SSL 리디렉션에 대해 자세히 알아보세요.

htaccess 리디렉션 설정은 동일한 mod_rewrite 모듈을 사용하여 유사한 방식으로 수행됩니다. 이제 url을 수정하는 대신 원하는 작업 및 리디렉션 코드로 플래그를 지정합니다.

다음 줄을 사용하여 mod_rewrite 없이 가장 간단한 리디렉션을 수행할 수 있습니다.

리디렉션 301 /index.html http://www.site.ru/index.php

그러나 일반적으로 더 넓은 효과를 가진 리디렉션이 필요합니다. 모든 것이 매우 유사해 보이지만 이제 플래그를 사용하여 대소문자를 구분하지 않고 [L]을 사용하여 처리를 중지하고 [R]을 사용하여 리디렉션합니다. 예를 들어 www가 없는 버전에서 www가 있는 도메인으로 htaccess를 리디렉션하는 경우:

RewriteCond %(HTTP_HOST) ^사이트\.ru$
RewriteRule ^(.*)$ http://www.site.ru/$1

값 R=301은 클라이언트에 반환될 리디렉션 코드를 의미하며 301, 302 등을 사용할 수 있습니다. www 도메인에서 접두어가 없는 도메인으로의 htaccess 리디렉션은 다음과 같습니다.

RewriteCond %(HTTP_HOST) ^www.site\.ru$
RewriteRule ^(.*)$ http://site.ru/$1

같은 방법으로 리디렉션을 수행할 수 있습니다.

RewriteRule ^old_address /new_address/$1

http 버전에서 https로 리디렉션:

RewriteCond %(SERVER_PORT) ^80$
RewriteCond %(HTTP)=on
RewriteRule ^(.*)$ https://site.ru/$1

RewriteEngine On RewriteCond %(SERVER_PORT) !^443$ RewriteRule .* https://%(SERVER_NAME)%(REQUEST_URI)

HTACCESS에서 오류 페이지 구성

페이지 생성 중 오류가 발생하면 웹 서버에서 문제가 발생합니다. 짧은 메시지및 오류 코드. 그러나 각 오류에 대해 그림과 전체 설명과 함께 별도의 페이지를 만들면 사용자에게 무슨 일이 일어나고 있는지 훨씬 더 명확해질 것입니다.

이 항목에 대해 haccess를 설정하면 매우 도움이 됩니다. ErrorDocument 지시문을 사용할 수 있습니다. 그것으로 4xx 및 5xx 오류에 대한 페이지의 html을 설정할 수 있습니다. 예를 들어 404의 경우:

오류 문서 404 http://site.ru/error/404.shtml
오류 문서 403 http://site.ru/error/403.shtml
오류 문서 401 http://site.ru/error/401.shtml
오류 문서 500 http://site.ru/error/500.shtml

오류 페이지가 작동하지 않으면 을 참조하십시오.

HTACCESS의 캐시

브라우저를 사용하면 특정 시간 동안 캐시에 이미지, 스크립트 파일, 스타일 및 기타 미디어 파일을 저장할 수 있습니다. 캐시 수명은 웹 서버에서 특수 헤더를 사용하여 설정합니다. 만료 모듈을 사용하여 구성할 수 있습니다.

기본적으로 모든 클라이언트에 대해 이미 캐싱이 활성화되어 있으므로 아무 것도 할 필요가 없습니다.그러나 스스로 재구성할 수 있습니다.

먼저 모듈을 활성화하고 기본 캐시 기간을 설정합니다.

만료일에 활성
ExpiresDefault "액세스 플러스 1개월"

이제 각 MIME 파일 유형에 대해 캐싱을 구성할 수 있습니다.

ExpiresByType text/html "액세스 플러스 1개월 15일 2시간"
ExpiresByType image/gif "액세스 플러스 5시간 3분"
ExpiresByType 이미지/x-icon "액세스 플러스 2592000초"

첫 번째 줄에서 우리는 다음을 나타냅니다. HTML 페이지다운로드 시점부터 1개월 15일 2시간 동안 유효한 것으로 간주되어야 합니다. 다음 파일 형식을 사용할 수 있습니다.

  • 이미지/x-아이콘;
  • 이미지/jpeg;
  • 이미지/png;
  • 이미지/gif;
  • 응용 프로그램/x-충격파-플래시;
  • 텍스트/css;
  • 텍스트/자바스크립트;
  • 애플리케이션/자바스크립트;
  • 애플리케이션/x-자바스크립트;
  • 텍스트/html;
  • 애플리케이션/xhtml+xml;

이 구문에서 오류가 발생하지 않도록 하려면 if로 묶습니다.


HTACCESS로 파일 압축하기

Apache 압축의 경우 deflate 모듈을 사용할 수 있습니다. Cpanel, .

여기서는 압축할 파일의 MIME 유형을 나열하는 것으로 충분합니다. 예를 들어:

AddOutputFilterByType DEFLATE 텍스트/html 텍스트/일반 텍스트/xml 애플리케이션/xml 애플리케이션/xhtml+xml 텍스트/css 텍스트/자바스크립트 애플리케이션/자바스크립트 애플리케이션/x-javascript

모듈이 지원되는지 확인하기 위해 if 문을 묶을 수도 있습니다.


비밀번호 잠금 디렉토리

cPanel 섹션 사용

그러나 .htaccess 파일은 Apache 서버를 구성하는 데 사용되며 다른 여러 서버에도 사용됩니다. 이상한 확장에도 불구하고 간단합니다. 텍스트 파일, 모든 편집기에서 수정할 수 있습니다. 이 튜토리얼에서는 .htaccess가 프로젝트에서 어떻게 사용될 수 있는지 살펴볼 것입니다.

.htaccess 파일은 Apache의 기본 구성 파일인 httpd.conf 와 동일한 형식을 사용합니다. 대부분의 설정은 두 파일 모두에서 사용할 수 있습니다.

디렉토리의 .htaccess 파일에 설정된 설정은 해당 디렉토리 및 하위 디렉토리에 대한 httpd.conf에 설정된 설정보다 우선합니다.

.htaccess 파일을 포함하는 디렉토리에 요청할 때마다 서버에서 읽기 때문에 .htaccess 파일을 동적 구성 파일이라고도 합니다. 이 사실은 .htaccess 파일의 변경 사항이 기본 구성 파일의 변경 사항과 달리 서버를 다시 시작하지 않고 즉시 적용된다는 것을 의미합니다. 또한 .htaccess 파일을 사용할 때 성능이 약간 저하됩니다. 하지만 메인 서버 설정 파일에 접근할 수 없는 경우에는 매우 편리합니다.

리디렉션 및 URL 변경

.htaccess 파일의 일반적인 용도는 리디렉션 또는 URL 변경을 설정하는 것입니다. 이 방법 SEO 목적으로 도메인 이름을 변경하거나 프로젝트의 파일 구조를 재정렬하거나 기억하기 어려운 긴 URL을 간단하고 이해하기 쉽게 만드는 데 도움이 됩니다.

리디렉션

리디렉션은 다음과 같이 매우 간단할 수 있습니다.

리디렉션 301 ^old\.html$ http://localhost/new.html

이 경우 HTTP 상태 코드 301(영구적으로 이동됨)이 사용되며 old.html에 대한 모든 요청은 new.html로 리디렉션됩니다. 이는 정규식을 사용하여 URL을 규칙과 일치시키므로 규칙 작성이 복잡해 지지만 URL이 유효한지 확인합니다. 리디렉션할 리소스의 전체 URL을 지정해야 합니다.

변경 사항

변경 규칙도 매우 간단할 수 있습니다.

RewriteRule ^old\.html$ new.html의 RewriteEngine

이 예브라우저의 주소 표시줄 내용을 변경하지 않고 투명하게 수행되는 한 파일에서 다른 파일로의 간단한 리디렉션이 있습니다. 첫 번째 지시문 RewriteEngine on 은 단순히 재작성 엔진이 실행 중인지 확인합니다.

방문자의 브라우저 주소 표시줄의 내용을 업데이트하려면 RewriteRule 끝에 R 플래그를 사용할 수 있습니다.

RewriteRule ^old\.html$ http://hostname/new.html

r 플래그는 외부 리디렉션을 유발하므로 URL이 일치합니다. 새 페이지. 플래그에 대한 상태 코드를 사용하여 방문자의 브라우저에서 페이지를 새로 고칠 수도 있습니다.

하나 가능한 사용리디렉션 - 방문자 및 검색 로봇을 위해 URL을 더 간단한 형식으로 변경합니다. 예를 고려하십시오.

RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

이 규칙을 통해 방문자는 다음과 같은 URL을 사용할 수 있습니다. 제품/턴테이블/기술/sl1210, 로 변환됩니다. product.php?cat=턴테이블& 브랜드=기술&제품=sl1210.예제 정규식에서 슬래시 사이의 괄호는 그룹화를 수행합니다. 각각을 $1 , $2 및 $3 로 사용할 수 있습니다. 대괄호 안에 있는 [^/]+ 조합은 슬래시를 제외한 모든 숫자의 모든 문자와 일치합니다.

실제로 URL 변경은 예제에 설명된 규칙보다 훨씬 더 복잡한 규칙을 갖지만 매우 복잡한 문제를 해결할 수 있습니다.

사용자 정의 오류 페이지

웹사이트에 표준 404 페이지를 표시하는 것은 비현실적입니다. 많은 사이트에서 이 기능을 사용하여 방문자에게 나머지 콘텐츠 스타일과 일치하는 오류 페이지를 제공하고 추가 정보방문자를 유지할 수 있습니다.

404 페이지 변경 규칙은 리디렉션 규칙과 매우 유사합니다.

오류 문서 404 "/404.html"

404 오류가 발생하면 지정된 페이지가 표시됩니다. 다른 서버 오류를 표시하는 페이지를 만들 수도 있습니다.

특정 리소스에 대한 액세스 제한

.htaccess 파일을 사용하여 모든 파일 또는 디렉토리에 대한 액세스를 제한할 수 있습니다. 예를 들어, 코드:

AuthName "사용자 이름과 암호를 입력하십시오" AuthUserFile /path/to/.htpasswd 유효한 사용자 AuthType 기본 필요

무료 액세스로부터 보호하려는 디렉토리에 있어야 합니다. AuthName 지시문은 암호 대화 상자에 표시될 메시지를 정의하고 AuthUserFile 규칙은 .htpasswd 파일의 경로를 정의합니다. Require 지시문은 등록된 사용자만 파일에 액세스할 수 있도록 지정합니다.

특정 파일을 보호하려면 위의 코드를 지시문으로 묶어야 합니다. , 파일 이름을 정의합니다.

AuthName "사용자 이름과 암호를 입력하십시오" AuthUserFile /path/to/.htpasswd 유효한 사용자 AuthType 기본 필요

이 기능을 사용하려면 개인 리소스에 액세스하기 위해 콜론으로 구분된 사용자 이름 및 암호화된 암호 목록이 포함된 .htpasswd 파일이 필요합니다. 이 파일은 네트워크에서 액세스할 수 없는 디렉토리에 저장해야 합니다. 암호를 암호화하여 저장해야 하므로 이러한 파일을 자동으로 생성하는 다양한 도구가 있습니다.

특정 방문자에 대한 액세스 차단

.htaccess 파일의 또 다른 용도는 특정 IP 주소 또는 에이전트의 모든 요청을 빠르고 쉽게 차단하는 것입니다. .htaccess 파일에 규칙을 추가하기만 하면 됩니다.

192.168.0.1에서 주문 허용, 거부 거부 모두 허용

order 지시문은 허용/거부 지시문을 고려할 순서를 Apache에 알려줍니다. 이 예에서 허용 지시문이 먼저 평가되고 그 다음에 거부가 평가됩니다. 모든 규칙의 허용이 먼저 고려되며(파일의 거부 규칙 뒤에 정의되더라도) 모든 IP 주소가 허용됩니다. 그런 다음 클라이언트의 IP 주소가 거부 지시문에 지정된 것과 일치하면 액세스가 차단됩니다. 예를 들어 다음을 지정하여 IP 주소 범위에 대한 액세스를 차단할 수 있습니다. 192.168 .

특정 에이전트에 대한 액세스를 차단하려면 다른 규칙을 사용할 수 있습니다.

RewriteCond %(HTTP_USER_AGENT) ^OrangeSpider RewriteRule ^(.*)$ http://%(REMOTE_ADDR)/$

이 예에서 HTTP_USER_AGENT 문자열이 OrangeSpider(잘못된 봇)로 시작하는 모든 클라이언트는 해당 주소로 리디렉션됩니다. 정규식은 (*)의 임의의 단일 문자(.)와 일치하고 변수 %(REMOTE_ADDR)가 주소에 사용됩니다. l 플래그는 Apache에 다음을 알립니다. 이 규칙클라이언트에 대한 마지막 작업이며 다른 작업을 수행할 필요가 없습니다.

IE의 출력 모드 지정

특정 요청에 대한 서버의 응답을 제어하는 ​​것 외에도 IE가 특정 렌더링 엔진을 가리키도록 하는 것과 같이 사용자의 브라우저에 영향을 줄 수 있습니다. mod_headers 모듈(있는 경우)을 사용하여 X-UA 호환 헤더를 설정할 수 있습니다.

헤더 세트 X-UA 호환 "IE=Edge"

.htaccess 파일에 이 줄을 추가하면 IE가 사용 가능한 최상의 디스플레이 모드를 사용하도록 지시합니다. 또한 규칙을 사용하여 필요하지 않은 파일에 이 헤더를 사용하는 것을 피할 수 있습니다. :

헤더가 설정되지 않음 X-UA 호환

캐싱 켜기

캐싱은 설치가 매우 쉽고 사이트 로드를 더 빠르게 만듭니다. 거의 변경되지 않는 리소스에 대한 업데이트 날짜를 설정하여 변경되지 않은 콘텐츠의 일부가 여러 번 다운로드되는 것을 방지할 수 있습니다.

예를 들어:

ExpiresByType image/gif "액세스 플러스 1개월" ExpiresByType image/png "액세스 플러스 1개월" ExpiresByType image/jpg "액세스 플러스 1개월" ExpiresByType image/jpeg "액세스 플러스 1개월" ExpiresByType video/ogg "액세스 플러스 1 월" ExpiresByType 오디오/ogg "액세스 플러스 1개월" ExpiresByType 비디오/mp4 "액세스 플러스 1개월" ExpiresByType video/webm "액세스 플러스 1개월"

모든 유형의 콘텐츠에 대해 ExpiresByType 규칙을 추가할 수 있습니다. ExpiresActive on 지시문은 단순히 리소스 만료 헤더 생성을 켭니다. 이 지시문은 모듈의 존재 여부에 따라 다릅니다. mod_expires아파치 서버에서.

압축 활성화

리소스 성능에 영향을 미치는 또 다른 방법은 압축을 사용하는 것입니다.

FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=콘텐츠 유형 $text/html FilterProvider COMPRESS DEFLATE resp=콘텐츠 유형 $text/css FilterProvider COMPRESS DEFLATE resp=콘텐츠 유형 $text/javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

이 압축 체계는 모듈이 설치된 새 버전의 Apache(2.1+)에서 작동합니다. 모드 필터. DEFLATE 알고리즘을 사용하여 콘텐츠를 압축합니다. 예제에서는 압축할 리소스 유형으로 text/html , text/css 및 text/javascript 를 지정합니다.

필터 정의는 COMPRESS 옵션이 있는 FilterDeclare 지시문으로 시작합니다. 그런 다음 필터의 영향을 받을 콘텐츠 유형을 나열합니다. FilterChain 규칙은 FilterProvider 규칙 목록을 기반으로 체인을 구축하도록 서버에 지시합니다. FilterProtocol 지시문을 사용하면 실행 중에 필터에서 사용하는 옵션을 지정할 수 있습니다. change=yes(필터로 내용을 변경할 수 있음(이 예에서는 압축)) 및 byteranges=no(필터는 전체 파일에만 사용할 수 있음) 옵션을 지정해야 합니다.

이전 버전의 Apache는 모듈을 사용합니다. mod_deflate DEFLATE 압축을 구성합니다. 여기에서는 필터에 대한 제어가 덜하지만 규칙은 더 간단합니다.

SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE 텍스트/html 텍스트/css 텍스트/자바스크립트

이 예제에서는 SetOutputFilter 규칙을 사용하여 압축 알고리즘을 설정하고 AddOutputFilterByType 규칙을 사용하여 필터에 대한 콘텐츠 파일 형식을 정의합니다.

일반적으로 서버는 Apache 서버 버전에 따라 설명된 모듈 중 하나를 사용합니다. 일반적으로 사용할 모듈을 알고 있습니다. 그러나 다른 서버에서 사용할 수 있는 일반 htaccess 파일을 만드는 경우 지시문을 사용하여 두 규칙 집합을 모두 포함할 수 있습니다. . 이러한 방식으로 올바른 규칙이 사용되며 설치 제거된 모듈에 대한 규칙이 구성 파일에 있는 경우 500 오류 생성을 피할 수 있습니다. 또한 하나의 프로세서 장치에서 많은 수의 사이트를 지원하는 호스팅에 서버를 배치할 때 큰 로드를 생성하지 않도록 압축을 비활성화할 수 있음을 기억해야 합니다.

결론

이 단원에서는 htaccess 파일의 가장 일반적으로 사용되는 용도를 다룹니다. 여기에 제공된 정보는 매우 인기 있는 주제에 대한 소개입니다. 탐색하고 사용할 수 있는 다른 많은 옵션과 구성이 있습니다.

.ht액세스(이름 시작 부분에 점이 있는)은 기본 구성 파일(apache/conf/httpd.conf)에 대한 액세스를 제공하지 않고 별도의 디렉토리(폴더)에 서버를 구성할 수 있는 Apache 서버 구성 파일입니다. 예를 들어, 디렉토리의 파일에 대한 권한을 설정하고, 색인 파일의 이름을 변경하고, 방문자를 특수 오류 페이지로 리디렉션하여 Apache 오류를 자체적으로 처리합니다. .ht액세스평범한 텍스트 문서, 확장자는 htaccess입니다. 이 파일은 일반적으로 사이트의 루트에 있지만 사이트의 다른 디렉터리에 대해 추가 .htaccess 파일을 만들 수 있습니다.

Mod_rewrite- 웹 서버가 URL을 번역하는 데 사용하는 모듈입니다.

mod_rewrite로 수행된 모든 작업을 기록하려면 httpd.conf에서 다음 항목을 사용하여 활성화할 수 있습니다.

RewriteLog /usr/local/apache/logs/mod_rewrite.log RewriteLogLevel 1

Mod_rewrite 모듈 지시문

가장 일반적으로 사용되는 옵션

%(REQUEST_URI) 요청 문자열(도메인 이름 및 GET 매개변수 제외), 예 "/server/htaccess/"
%(HTTP_호스트) 도메인 이름, 예: "max22.ru"
%(QUERY_STRING) GET 매개변수 문자열

.htaccess 파일을 사용하여 구현 옵션 리디렉션

  1. 단순 리디렉션:
    리디렉션 301 / http://www.domainname.ru/ 또는 리디렉션 /secret http://www.site.ru/nosecret 또는 # 정규식 RedirectMatch 301 사용 .* http://www.site.ru/? .ht액세스또는 httpd.conf아파치용. 첫 번째 "/"는 모든 하위 디렉터리를 포함하여 사이트의 최상위 수준에서 모든 항목이 리디렉션됨을 의미합니다(마지막 "/"를 넣는 것을 잊지 마십시오). PR을 유지하면서 페이지만 리디렉션하려면 오래된 페이지, 다음과 같이 할 수 있습니다.

    리디렉션 301 /old/old.htm http://www.you.ru/new.htm 여기서:
    /old/old.htm - 이전 페이지의 경로 및 이름
    http://www.you.com/new.htm - 이동된 페이지의 새 경로 및 새 이름

  2. 사용자 ip 또는 특정 페이지(이름 마스크 포함)를 요청할 때 모든 페이지로 리디렉션합니다.
    사용자의 IP가 192.152.37.125이면 user.php 페이지로 리디렉션됩니다. SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir" RewriteCond %(REDIR) redir RewriteRule ^/$ /user.php
  3. 특정 파일을 요청할 때 리디렉션합니다. .htaccess 파일(gif 및 jpg)에 확장자가 지정되지 않은 파일에 대한 요청이 있는 경우 리디렉션은 다음과 같습니다. RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
  4. mod_rewrite 사용:
    옵션 +FollowSymLinks RewriteEngine on RewriteCond %(HTTP_HOST) ^yourdomain\.ru RewriteRule ^(.*)$ http://www.yourdomain.ru/$1
  5. 정규 표현식으로 리디렉션:
    RedirectMatch 301(.*) http://www.yourdomain.ru$1 .htaccess 파일에 등록되었습니다. (.*) 리디렉션 일치실제로 도메인 이름 뒤의 정규식 패턴과 일치합니다. 따라서 ^/yourdomain.ru의 패턴을 일치시킬 수 없습니다. 그러나 .html 확장자를 사용하여 페이지를 같은 이름이지만 확장자가 .php인 파일로 변환할 수 있습니다. RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php 개별 페이지에 대해 다른 리디렉션을 수행해야 하는 경우 다음을 사용할 수 있습니다. RedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$ http ://www.newdomain.com /other_page.php RedirectMatch 영구 ^/(.*)$ http://www.newdomain.com/ " 리디렉션 일치 영구"는 "RedirectMatch 301"과 동일하며 "*(와일드카드)"가 있는 행은 이 목록의 마지막 행이어야 합니다.
  6. 읽을 수 있는 URL 만들기
    예를 들어 www.site.ru/product.php?id=123을 www.site.ru/product/123으로 변환하려면 다음과 같이 하십시오. RewriteRule ^product/([^/\.]+)/?$의 RewriteEngine product .php?id=$1 [L] 다음 예에서는 www.site.ru/script.php?product=123을 www.site.ru/cat/product/123/으로 변환합니다. RewriteRule cat/(.* )/(. *)/$/script.php?$1=$2
  7. PHP로 이동:
    header("HTTP/1.1 301 영구적으로 이동됨"); header("위치: http://www.newdomain.ru/newdir/newpage.htm"); 출구(); 당연히 페이지를 생성해야 하며, 접근 시 Redirect가 발생하여 서버에 배치합니다. 그리고 HTTP/1.1을 지정하는 것이 좋습니다(공유 호스팅을 지원하지 않는 HTTP/1.0 또는 HTTP/0.9 대신).
  8. 폴더의 모든 파일을 하나의 파일로 리디렉션합니다.
    예를 들어 더 이상 슈퍼 할인 사이트 섹션이 필요하지 않고 /superdiscount 폴더에 대한 모든 요청을 단일 /hot-offers.php 파일로 리디렉션하려고 합니다. 이렇게 하려면 .htaccess에 다음 코드를 추가합니다. RewriteRule ^superdiscount(.*)$ /hot-offers.php
  9. 하나의 파일을 제외한 전체 폴더 리디렉션
    다음 예에서 /superdiscount 폴더의 모든 파일은 /hot-offers.php를 제외하고 /superdiscount/my-ebook.html로 리디렉션됩니다. 이 파일은 /hot-to-make-million.html로 리디렉션되어야 합니다. RewriteRule ^superdiscount/ 내 -ebook.html /hot-to-make-million.html RewriteRule ^superdiscount(.*)$ /hot-offers.php
  10. 동적 URL을 새 파일로 리디렉션합니다.
    이 옵션은 매개변수가 있는 동적 URL을 새 정적 파일로 리디렉션하려는 경우에 유용합니다. RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm 즉, 이제 http://www.kass.ws/article.jsp?id=8632 및/또는 http://www.kass.ws/article.jsp?id=8632와 같은 파일에 대한 요청입니다. /www .kass.ws/article.jsp?id=1245는 http://www.kass.ws/latestnews.htm 파일로 전송됩니다.
  11. 새 파일의 대량 리디렉션.
    이제 CMS를 변경한 후와 같이 많은 URL을 리디렉션해야 하는 경우 가장 어려운 부분으로 넘어가겠습니다. 여기서 여러 가지 문제가 즉시 발생합니다. 첫째, 변경된 모든 주소를 .htaccess 파일에 추가하는 데 시간이 오래 걸리고 작업 자체가 불쾌합니다. 둘째, .htaccess 파일에 너무 많은 항목이 있으면 Apache 서버 속도가 느려집니다. 셋째, 너무 많은 정보를 입력하다 보면 어딘가에서 실수할 가능성이 높다. 따라서 가장 좋은 방법은 동적 리디렉션을 작성할 프로그래머를 고용하는 것입니다.
    아래 예제는 PHP로 작성되었지만 모든 언어로 수행할 수도 있습니다. 로 전환했다고 가정합니다. 새로운 시스템사이트의 링크와 이전 ID로 끝나는 모든 파일은 혼합되어야 합니다. 먼저, 이전 ID와 리디렉션에 대한 새 URL을 포함하는 데이터베이스에 테이블을 만듭니다. old_id INT new_url VARCHAR (255) 다음으로 이전 ID를 새 URL과 연결하는 코드를 작성합니다.
    그런 다음 .htaccess에 다음 줄을 추가합니다. RewriteRule ^/product-(.*)_(+).php /redirectold.php?productid=$2 그런 다음 301 리디렉션을 지원하는 PHP 파일 redirectold.php를 만듭니다.

    이제 이전 URL에 대한 모든 요청은 새 URL을 찾고 새 URL과 함께 301 응답을 반환하는 redirectold.php를 호출합니다.

    시간을 기준으로 리디렉션

    시간에 민감한 콘텐츠 유형 트릭에 관해서는 많은 웹마스터가 여전히 특수 페이지로 리디렉션되는 CGI 스크립트를 사용합니다. mod_rewrite를 통해 어떻게 할 수 있습니까?

    리디렉션 조건에 대해 TIME_xxx라는 변수가 많이 있습니다. 비교를 위한 특별한 사전 패턴과 함께 STRING 및 =STRING 시간 종속 리디렉션을 수행할 수 있습니다. RewriteEngine on RewriteCond %(TIME_HOUR)%(TIME_MIN) >0700 RewriteCond %(TIME_HOUR)%(TIME_MIN)<1900 RewriteRule ^foo\.html$ foo.day.html RewriteRule ^foo\.html$ foo.night.html

    이것은 07:00에서 19:00 사이에 URL foo.html을 요청할 때 foo.day.html의 내용을 반환하고 나머지 시간에는 foo.night.html의 내용을 반환합니다.

  12. 처음에 모든 요청을 제거합니다. "www."
    RewriteEngine on # 우리가 mod_rewrite RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^/?(.*) http://%1/$1을 사용하고 싶다고 알립니다.

    도메인 이름을 확인합니다. www로 시작하면 "모든 사람, http://%1/$1" 규칙이 작동합니다. 여기에서 %1은 www가 없는 도메인이고(조건에서 가져옴) $1은 주소(규칙 자체에서 가져옴)입니다.

  13. index.php의 끝에서 모든 요청을 제거합니다. index.php가 없는 페이지로 리디렉션

    검색 엔진은 중복 페이지를 심하게 취급합니다. 이를 방지하려면 http://your_domain/ 및 http://your_domain/index.php와 같은 페이지를 삭제(접착)해야 합니다.

    RewriteCond %(THE_REQUEST) ^.*/index.php RewriteRule ^(.*)index.php$ http://%(HTTP_HOST)/$1

  14. 확장자 변경 .html.php
    때로는 정적 웹 사이트가 있고 작업을 위해 일종의 PHP 스크립트가 필요한 경우가 있습니다. 이렇게 하려면 이 페이지를 PHP 파일로 취급하도록 서버에 지시해야 합니다. AddHandler application/x-httpd-php .html 이 트릭은 다른 파일 확장자에도 사용할 수 있습니다. AddHandler application/x-httpd-php .xml AddHandler application/x-httpd-php .asp

특정 디렉토리에 대한 액세스 거부

  1. 디렉터리의 모든 파일에 대해: 모두에서 거부
  2. 특정 파일에: 모두를 부정하다
  3. 사용자 ip: 주문 거부, 모든 거부 허용 192.152.37.125부터 허용 ip 192.152.37.125를 가진 사용자만 이 디렉터리에 액세스할 수 있습니다.

    반대로 개별 IP 사용자가 사이트에 액세스하는 것을 금지하려면 다음 줄을 작성하십시오.

    주문 허용, 모두 거부 허용 192.152.37.125 거부 123.456.177 거부

  4. 지시어 옵션 -색인 - 색인 파일이 없을 때 디렉토리의 내용을 표시하는 것을 금지 때로는 디렉토리에 파일이 없을 때 기본적으로 표시되는 디렉토리의 파일 목록이 표시되도록 만들어야 합니다. 디렉토리가 표시되지 않습니다. 그런 다음 .htaccess에 다음 줄을 추가할 수 있습니다. 옵션 -Indexes 이 경우, 방문자는 디렉터리에 있는 파일 목록 대신 HTTP 오류 403 - 액세스가 금지됩니다.
  5. 확장 유형이 여러 개인 파일에 대한 액세스 거부
  6. 모두를 부정하다

    *.inc, *.conf 및 *.cfg 확장자를 가진 파일에 대한 액세스는 금지됩니다. 지시문은 기본적으로 정규식에서 작동하지 않지만 지시문 옵션에 물결표 문자(~)를 넣어 활성화할 수 있습니다. 구문은 다음과 같습니다.

    [물결] [공백] [further_all_without_spaces] 이 액세스를 차단하려면 다음을 작성하십시오. RewriteRule ^.htaccess$ - [F] 이 규칙은 다음과 같이 번역됩니다.
    누군가 .htaccess 파일에 액세스하려고 하면 시스템에서 "HTTP 응답 403" 또는 "403 금지 - 이 서버의 /.htaccess에 액세스할 수 있는 권한이 없습니다"라는 오류 코드를 생성해야 합니다.

    이 정규식의 ^.htaccess$ 구문은 다음을 의미합니다.
    ^ - 줄 시작의 앵커
    $ - 행 끝 앵커
    . - 정규 표현식에서 점 "." 메타 문자를 나타내며 실제 마침표를 계속 사용하려면 백슬래시로 보호해야 합니다.

    파일 이름은 시작 앵커와 끝 앵커 사이에 정확히 위치해야 합니다. 이렇게 하면 특정 파일 이름만 오류 코드가 생성되고 다른 파일 이름은 생성되지 않습니다.
    [에프]- 특별한 "금지" 플래그(금지됨).
    - 문자의 경우는 고려하지 않습니다.
    - "또는 다음 조건"을 의미합니다.

인코딩 정의

서버가 파일을 "주는" 인코딩 결정

AddDefaultCharset windows-1251 옵션: KOI8-R, UTF-8, 윈도우-1251

업로드된 파일의 인코딩 결정

CharsetSourceEnc windows-1251

.htaccess를 사용하여 디렉토리 비밀번호 설정

디렉토리에 대한 비밀번호를 설정하려면 Apache 웹 서버에서 제공하는 기본 인증 시스템을 사용할 수 있습니다. 다음 지시문을 사용하여 암호로 액세스를 제한하려는 디렉토리에 .htaccess 파일을 만듭니다. AuthType Basic AuthName "Some Name" AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd require valid-user Path /www /some_login/ www/htdocs/some_dir/.htpasswd는 서버 디스크에 있는 암호 파일의 전체 경로입니다. 예를 들어 .htpasswd 파일(비밀번호가 포함됨)을 FTP를 통해 서버에 로그인하여 얻을 수 있는 홈 디렉토리에 배치하면 이 파일의 경로는 /www/some_login/www/htdocs와 같습니다. /some_dir/.htpasswd , 여기서 some_login은 로그인입니다. AuthUserFile 지시문에서 로그인/비밀번호를 사용하여 파일의 절대 경로를 지정합니다. 이 경로는 나중에 만들 것입니다. .htaccess 파일을 텍스트 편집기를 사용하여 서버에서 직접 생성하지 않고 컴퓨터에서 생성하는 경우 .htaccess는 FTP를 통해 엄격하게 텍스트(ASCII) 모드로 전송되어야 한다는 사실에 특히 주의하십시오.

암호 파일을 만듭니다. 암호 파일에는 login:password와 같은 행이 포함되어야 합니다. 암호는 MD5 알고리즘을 사용하여 암호화해야 합니다. 이러한 파일을 생성하는 한 가지 방법은 Apache와 함께 제공되는 프로그램을 사용하는 것입니다 - htpasswd (저희 서버에서는 /usr/local/apache/bin 디렉토리에 있으며 전체 경로는 /usr/local/apache/bin/입니다. htpasswd).

서버에서 직접 유닉스 셸에서 암호 파일을 만드는 방법을 고려하십시오. 쉘로 이동하여 다음 명령을 실행하겠습니다.

Htpasswd -mbc .htpasswd user1 7B1safkir - 새 .htpasswd 파일을 생성합니다. 여기서 명령줄에 지정된 암호를 사용하여 user1 사용자에 대한 항목을 추가합니다. htpasswd .htpasswd user2 - 이미 존재하는 .htpasswd 파일에 user2를 추가하고 해당 프로그램 요청에 대한 응답으로 암호를 수동으로 입력합니다.

모든 로그인이 끝나면 파일을 서버에 업로드해야 합니다.

페이지의 비밀번호를 설정하는 다른 방법 정보

사용자 정의 오류 페이지 설정

다음과 같이 고유한 오류 페이지를 설정할 수 있습니다. ErrorDocument 404 http://www.site.ru/404.php IE는 512바이트보다 작은 페이지를 무시합니다.

디렉토리 및 하위 디렉토리 인덱싱

검색 엔진이 디렉토리와 하위 디렉토리를 인덱싱하지 않으려면 다음 행을 작성해야 합니다. 예를 들면 다음과 같습니다. DirectoryIndex index.php 이 지시문은 파일 이름을 지정하지 않고 디렉토리에 액세스할 때 호출될 파일을 지정합니다.

여러 인덱스 페이지를 지정할 수 있습니다. 디렉토리를 요청할 때 DirectoryIndex 지시문에 나열된 순서대로 검색됩니다. index.html 파일을 찾을 수 없으면 index.php 파일 등을 검색합니다.

DirectoryIndex index.html index.php index.shtml

개인적으로 저는 빈 디렉토리에서 사이트의 메인 페이지나 다른 적절한 페이지로 리디렉션하는 것을 선호합니다. 예를 들어 www.site.ru/pic/ 디렉토리는 www.site.ru로 리디렉션될 수 있습니다.

이미지 다운로드 방지

웹마스터가 사진과 함께 귀하의 사이트에서 콘텐츠를 뻔뻔하게 복사하고 귀하의 서버에서 사진을 로드하는 경우가 종종 있습니다. 이로 인해 추가 트래픽이 발생하여 종종 여러 문제가 발생합니다. 이러한 웹마스터로부터 자신을 보호하고 검색 로봇이 이미지를 인덱싱하는 것을 방지하는 방법은 무엇입니까? 간단합니다: RewriteCond %(HTTP_REFERER) 의 RewriteEngine . RewriteCond %(HTTP_REFERER) !^http://([^.]+\.)?사이트\. RewriteCond %(HTTP_REFERER) !google\. RewriteCond %(HTTP_REFERER) !search\?q=cache RewriteCond %(HTTP_REFERER) !msn\. RewriteCond %(HTTP_REFERER) !야후\. RewriteCond %(REQUEST_URI) !^/hotlinker\.gif$ RewriteRule \.(gif|jpg|png)$ /hotlinker.gif hotlinker.gif - 실제 이미지 대신 표시할 이미지. 이 이미지에 로고와 사이트 링크를 표시하는 것이 좋습니다.

승인되지 않은 사이트에서 이미지에 액세스하는 것을 방지하는 또 다른 옵션:

SetEnvIfNoCase 참조자 "^$" local_ref=1 SetEnvIfNoCase 참조자 "^http://(www\.)?htmlweb\.ru" local_ref=1 SetEnvIfNoCase 참조자 "^http://(www\.)?images\.yandex\ .ru" local_ref=1 SetEnvIfNoCase 참조자 "^http://(www\.)?hghltd\.yandex\.com" local_ref=1 주문 허용, env=local_ref에서 허용 거부

검색 엔진과 모든 종류의 크롤러는 사이트에 엄청난 트래픽을 생성합니다. 아래 코드 블록을 사용하면 봇이 사이트에 액세스하는 것을 방지할 수 있습니다.

RewriteCond %(HTTP_USER_AGENT) (Googlebot|Slurp|spider|Twiceler|heritrix| Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer| MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeveistsTourist|ActiveTour BeyondBot | Clustered-Search-Bot | MSIECrawler | freefind | galaxy | genieknows | |cloakBrowser| fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot| Windows\ 95|^Mozilla/4\.05\ \$|^Mozilla /4\.0$) RewriteRule ^(.*)$ - [ F] # RewriteCond %(HTTP_USER_AGENT) ^Mozilla.* RewriteCond %(HTTP_USER_AGENT) ^Opera.* RewriteCond %(HTTP_USER_AGENT) ^Firefox.* RewriteCond %(HTTP_USER_AGENT ) ^Netscape.* RewriteRule ^(.*)$ - [L] RewriteRule ^(.*)$ - [F]

robots.txt 파일에 대한 조회수 추적

검색 엔진 방문에 대한 자세한 정보를 얻으려면 robots.txt 파일 액세스에 대한 자세한 정보가 있으면 유용합니다. 이를 구성하려면 ".htaccess"에 다음 항목이 있어야 합니다. ^robots.txt$ / robot.php?%(REQUEST_URI) 이제 "robots.txt" 파일을 요청할 때 RewriteRule이 방문자(로봇)를 요청 처리 robots.php 스크립트로 리디렉션합니다. 또한 변수가 스크립트에 전달되어 필요에 따라 처리됩니다. "REQUEST_URI"는 요청된 파일의 이름을 지정합니다. 이 예에서 이것은 "robots.txt"입니다. 스크립트는 "robots.txt"의 내용을 읽고 웹 브라우저나 검색 엔진 로봇으로 보냅니다. 따라서 방문자 조회수를 계산하고 로그 파일을 보관할 수 있습니다.

PHPSESSID

URL에 PHPSESSID 추가를 비활성화하려면 index.php 시작 부분에 다음을 삽입하세요.

Ini_set("세션.use_trans_sid", 0);

또는 .htaccess로 작성하십시오.

php_flag session.use_trans_sid 끄기

이 모든 것이 복잡해 보인다면 htaccess를 사용하여 동적 URL을 정적 URL로 변환하는 기성 서비스를 사용하십시오.

캐싱 지시문

모든 파일 유형에 대한 액세스 시간별 캐싱 ExpiresDefault "액세스 플러스 600초" 모든 파일 유형에 대한 캐싱 수정 시간별 ExpiresActive ExpiresDefault "수정 플러스 600초" 특정 파일 유형에 대한 캐싱 ExpiresByType 텍스트/css "수정 플러스 600초" ExpiresByType image/jpeg "수정 + 600초" ExpiresByType image/gif "수정 + 600초" ExpiresByType image/x-ico "수정 + 600초" ExpiresByType image/png "수정 + 600초"

Apache 서버로 캐싱 비활성화

Apache 서버 구성 파일 열기 httpd.conf다음 행의 주석 처리를 제거하십시오.

LoadModule expires_module 모듈/mod_expires.so LoadModule headers_module 모듈/mod_headers.so ... AddModule mod_expires.c AddModule mod_headers.c

.htaccess에 다음을 입력합니다.

# 이 폴더에서 캐싱 비활성화 # 모듈은 활성화되어야 합니다 # mod_headers.c 및 mod_expires.c # # Cache-Control 헤더 헤더 추가 Cache-Control "no-store, no-cache, must-revalidate"# 헤더 만료 ExpiresActive On ExpiresDefault "지금"

필요한 헤더는 자동으로 전송되며 PHP로 특별히 작성할 필요가 없습니다. 캐시가 이미 비활성화되어 있습니다!

캐시 제어 http 헤더 설명

.htaccess 파일로 캐싱

# 이 폴더에서 캐싱 활성화 # 모듈은 활성화되어야 합니다 # mod_headers.c 및 mod_expires.c # #ExpiresDefault "액세스 플러스 1시간" #ExpiresDefault "액세스 플러스 10년" ExpiresDefault "액세스 플러스 1개월" ExpiresByType text/cache-manifest "액세스 플러스 0초" ExpiresByType text/html "액세스 플러스 0초" ExpiresByType text/ xml "액세스 플러스 0초" ExpiresByType application/xml "액세스 플러스 0초" ExpiresByType application/json "액세스 플러스 0초" ExpiresByType application/rss+xml "액세스 플러스 1개월" ExpiresByType image/x-icon "액세스 플러스 1주 " ExpiresByType image/gif "액세스 플러스 1년" ExpiresByType image/png "액세스 플러스 1년" ExpiresByType image/jpg "액세스 플러스 1년" ExpiresByType image/jpeg "액세스 플러스 1년" ExpiresByType video/ogg "액세스 플러스 1년 " ExpiresByType 오디오/ogg "액세스 플러스 1년" ExpiresByType 오디오/mp3 "액세스 플러스 1년" ExpiresByType video/mp4 "액세스 플러스 1년" ExpiresByType video/webm "액세스 플러스 1년" ExpiresByType text/x-component "액세스 플러스 1개월" ExpiresByType 글꼴/트루타입 "액세스 플러스 1 year" ExpiresByType 글꼴/opentype "액세스 플러스 1년" ExpiresByType application/x-font-woff "액세스 플러스 1년" ExpiresByType image/svg+xml "액세스 플러스 1개월" ExpiresByType application/vnd.ms-fontobject "액세스 플러스 1 연도" ExpiresByType 텍스트/css "액세스 플러스 2개월" ExpiresByType 애플리케이션/자바스크립트 "액세스 플러스 2개월" ExpiresByType 텍스트/자바스크립트 "액세스 플러스 2개월" 헤더 추가 캐시 제어 "공개"

.htaccess 파일로 자바스크립트 파일 캐싱

ExpiresDefault "액세스 플러스 3일"

캐싱할 때 주의 파일 변경 시 사용자는 3일 후에만 새 버전을 받을 수 있습니다!

HTML 페이지가 PHP 코드를 처리하도록 하는 방법은 무엇입니까?

.htaccess 파일에 다음 줄을 작성하십시오. RemoveHandler .php .htm .html AddHandler application/x-httpd-php .php .htm .html

하나의 공유 호스팅에서 여러 사이트를 호스팅하는 방법은 무엇입니까?

요금제에서 할당한 도메인 수와 달리 하나의 가상 호스팅에 둘 이상의 사이트를 배치하려면 ".htaccess" 파일에 다음 줄을 작성해야 합니다.

RewriteEngine On RewriteRule ^newdirectory/ - [L] RewriteCond %(HTTP_HOST) (www.)?newdomain.ru RewriteRule(.*) newdirectory/$1 [L]

어디에:
newdirectory/ - 두 번째 사이트가 위치할 폴더
newdomain.ru - 리디렉션할 도메인

이 경우 하나의 메일 계정을 갖게 됩니다. 저것들. 상자가 있다면 [이메일 보호됨], 다음 newdomain.ru 도메인을 연결한 후 사서함 [이메일 보호됨]두 번째 이름이 나타납니다. [이메일 보호됨]새 사서함(예: 정보)을 만들 때 두 개의 이름이 자동으로 할당됩니다. [이메일 보호됨]그리고 [이메일 보호됨]

둘 이상의 디렉토리에서 페이지 검색

때로는 웹 서버가 둘 이상의 디렉토리에서 페이지를 찾도록 해야 합니다.

RewriteEngine on # 먼저 지정된 위치/... # ...찾으면 검색을 종료합니다. RewriteCond /your/docroot/dir1/%(REQUEST_FILENAME) -f RewriteRule ^(.+) /your / docroot/dir1/$1 [L] # 초 - pub/... # ...찾으면 검색을 종료합니다. RewriteCond /your/docroot/dir2/%(REQUEST_FILENAME) -f RewriteRule ^ ( .+) /your/docroot/dir2/$1 [L] # 그렇지 않으면 다른 지시문을 계속 진행합니다. RewriteRule ^(.+) -

사용자 가상 호스트

사용자 페이지에 www.subdomain.domain.ru 주소를 제공하려는 경우 다음 규칙 집합을 사용하여 http://www.subdomain.domain.ru/path를 내부 경로 /home/subdomain/path로 변환할 수 있습니다. :

RewriteCond %(HTTP_HOST) ^www\.[^.]+\.ru$ RewriteRule ^(.+) %(HTTP_HOST)$1 [C] RewriteRule ^www\.([^.]+)\.ru( .*) /집/$1$2

서버에 업로드하는 동안 파일이 손상됨

형식(enctype="multipart/form-data" 지정)을 통해 파일을 전송할 때 이진 데이터가 손상되면 /cgi-bin/.htaccess에 다음 지시문을 추가합니다. CharsetRecodeMultipartForms Off.

SWF 파일을 로드하는 동안 오류가 발생했습니다.
키워드가 포함된 페이지에 액세스할 때 오류,
$_REQUEST 유형

설치된 모듈 때문일 수 있습니다. 아파치에서. 기본적으로 쿼리에서 SQL 인수 및 기타 잠재적으로 위험한 명령이 있는 행을 차단합니다.

가능한 오류 메시지:

금지

이 서버의 /adm/index.php에 액세스할 수 있는 권한이 없습니다. 또한 요청을 처리하기 위해 ErrorDocument를 사용하는 동안 404 찾을 수 없음 오류가 발생했습니다.

요청이 안전하지 않아 거부되었습니다.

.htaccess에 추가 SecFilterEngine 끄기 SecFilterScanPOST 끄기메시지:

"POST /wp-admin/async-upload.php HTTP/1.1" 406 354 "-" "Shockwave Flash"

서버에 파일을 업로드하는 경우에만 보호를 제거할 수 있습니다. SecFilterEngine 끄기 SecFilterScanPOST 끄기

전체 사이트에서 보호를 제거하지 않고 필요한 폴더에서만 보호를 제거하는 것이 가장 좋습니다.

서버 변수

다음 형식의 변수입니다. %(NAME_OF_VARIABLE)

어디 NAME_OF_VARIABLE다음 목록에서 가져온 문자열일 수 있습니다.

이 변수는 유사한 이름의 HTTP MIME 헤더 및 Unix 시스템의 Apache 서버 변수 또는 struct tm 필드와 정확히 일치합니다. mod_rewrite에 특별한 것들은 다음과 같습니다:

IS_SUBREQ- 요청이 현재 하위 요청으로 실행 중인 경우 "true" 텍스트를 포함하고 그렇지 않으면 "false"를 포함합니다. 하위 요청은 자체 작업을 수행하기 위해 추가 파일 또는 URI를 처리해야 하는 모듈에 의해 생성될 수 있습니다.

API_VERSION- include/ap_mmn.h에 정의된 서버의 현재 빌드에 있는 Apache 모듈 API(서버와 모듈 간의 내부 인터페이스) 버전입니다. 모듈의 API 버전은 사용 중인 Apache의 버전과 일치하지만(Apache 버전 1.3.14의 경우 예를 들어 19990320:10) 이것은 주로 모듈 작성자에게 중요합니다.

THE_REQUEST- 브라우저가 서버로 보낸 완전한 HTTP 요청 문자열(예: " GET /index.html HTTP/1.1 "). 브라우저에서 보낸 추가 헤더는 포함되지 않습니다.

REQUEST_URI- HTTP 요청 문자열에서 요청된 리소스입니다.

REQUEST_FILENAME- 이 요청에 해당하는 파일 또는 스크립트에 대한 서버 파일 시스템의 전체 경로입니다.

메모:

  1. SCRIPT_FILENAME 및 REQUEST_FILENAME 변수는 동일한 값, 즉 Apache의 내부 request_rec 구조의 파일 이름 필드 값을 포함합니다. 첫 번째 이름은 잘 알려진 CGI 변수 이름이고 두 번째 이름은 REQUEST_URI(request_rec 구조의 uri 필드 값 포함)의 영구 복사본입니다.
  2. 특별한 형식이 있습니다: %(ENV:variable) 여기서 변하기 쉬운모든 환경 변수가 될 수 있습니다. 이것은 Apache에서 내부적으로 조회되며(없는 경우) Apache 서버 프로세스에서 getenv()를 호출하여 조회됩니다.
  3. 특별한 형식이 있습니다: %(HTTP:header) 여기서 헤더모든 HTTP MIME 헤더 이름이 될 수 있습니다. 이것은 HTTP 요청에서 조회됩니다. 예: %(HTTP:Proxy-Connection) HTTP 헤더 값 " Proxy-Connection: ".
  4. 최종 값을 결정하기 위해 내부(URL 기반) 하위 요청에 의해 만들어진 %(LA-U:variable) 미리보기 요청에 대한 특수 형식이 있습니다. 변하기 쉬운. API의 일부 단계에서 나중에 실제로 정의되어 해당 단계에서 사용할 수 없는 변환에 변수를 사용하려는 경우 사용합니다. 예를 들어 서버 컨텍스트(httpd.conf 파일)에서 REMOTE_USER 변수에 따라 변환하려면 %(LA-U:REMOTE_USER)를 사용해야 합니다. 이 변수는 인증 단계에서 설정되기 때문입니다. ~ 후에 mod_rewrite가 작동하는 URL 번역 단계. 반면에 API의 Fixup 단계를 통해 디렉토리(.htaccess 파일) 컨텍스트에서 mod_rewrite를 구현하고 이 단계보다 먼저 인증 단계가 있기 때문에 거기에서 %(REMOTE_USER)를 사용하면 됩니다.
  5. 특수 형식이 있습니다. %(LA-F:variable) 최종 값을 결정하기 위해 내부(파일 이름 기반) 하위 쿼리를 생성합니다. 변하기 쉬운. 이는 기본적으로 위의 LA-U 형식과 동일합니다.

중복 없는 메인 페이지

일반적으로 기본 페이지 코드는 물리적으로 index.html 또는 index.php 파일에 있지만 사이트는 yoursite.ru, yoursite.ru/index.html, www.yoursite.ru 및 www와 같은 요청에 따라 열려야 합니다. yoursite.ru/index .html 그러나 검색 엔진의 경우 이것은 4개의 다른 URL입니다! .htaccess를 올바르게 설정하지 않으면 검색 엔진이 색인에 4개의 동일한 페이지를 추가합니다. 이것은 나쁜 사이트의 표시입니다. .htaccess에서 다음 코드를 사용하면 이 문제를 피할 수 있습니다.

옵션 +FollowSymLinks RewriteEngine on RewriteCond %(HTTP_HOST) ^yoursite.ru RewriteRule (.*) http://www.yoursite.ru/$1 RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://www.yoursite.ru/

모든 중복 페이지는 코드를 사용하여 기본 페이지(http://www.yoursite.ru/)로 리디렉션됩니다.

URL 끝에 슬래시가 없는 중복 페이지

www.yoursite.ru/about 및 www.yoursite.ru/about/ 페이지의 색인이 서로 다른 것을 방지하려면 다음 코드를 입력하십시오.

슬래시가 없는 페이지는 "슬래시"로 리디렉션됩니다.

RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_URI) !(.*)/$ RewriteRule ^(.*)$ /$1/

파일을 여는 대신 저장(로드)

많은 사람들이 .rar 확장자를 가진 아카이브를 다운로드하려고 할 때 브라우저가 심볼의 뒤죽박죽에서 일반 텍스트로 파일을 여는 것을 보았습니다. 이는 사이트 서버가 브라우저에서 열지 않아야 하는 저장 파일 형식을 강제로 구성하지 않았음을 의미합니다.

AddType 응용 프로그램/옥텟 스트림 .rar .doc .mov .avi .pdf .xls .mp4

보낸 페이지 압축

SetOutputFilter DEFLATE 헤더 unset ETag FileETag 없음

강제 후행 슬래시

다음 코드는 항상 사이트의 URL에 슬래시를 추가하여 사이트의 SEO 영역에서 많은 도움을 줍니다.

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/

FireFox용 글꼴의 도메인 간 사용

내장 글꼴을 사용할 때 Firefox는 외부 사이트에서 글꼴을 가져오는 것을 허용하지 않습니다. .htaccess 파일에 대한 다음 코드는 이 제한을 우회합니다.

# yourdomain.com을 블로그 URL 헤더 세트 Access-Control-Allow-Origin "http://yourdomain.com"으로 교체합니다.

JavaScript 파일에서 PHP 실행

JavaScript 코드를 개발할 때 예를 들어 데이터베이스에서 데이터를 가져오기 위해 .js 파일에서 PHP를 사용해야 하는 경우가 있습니다.

AddType 응용 프로그램/x-httpd-php .js AddHandler x-httpd-php5 .js SetHandler 애플리케이션/x-httpd-php

robots.txt, sitemap.xml 등의 파일을 분해합니다. 도메인 폴더로

# 사이트 루트에서 요청한 파일이 있으면 도메인 폴더에 리디렉션합니다. RewriteCond %(DOCUMENT_ROOT)/domain/%(HTTP_HOST)/root%(REQUEST_URI) -f RewriteRule ^(.*)$ /domain /%(HTTP_HOST)/루트/$1[L]

.htaccess를 통한 사용자 에이전트 차단

일부 유형의 사용자 에이전트가 불필요한 요청으로 서버를 로드하는 문제에 직면한 경우 .htaccess에 다음 행을 추가하여 제거할 수 있습니다.

SetEnvIfNoCase 사용자 에이전트 "^블랙홀" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Titan" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebStripper" bad_bot SetEnvIfNoCase 사용자 에이전트 "^NetMechanic" bad_bot SetEnvIfNoCase 사용자 에이전트 "^CherryPicker" bad_CherryPicker "^EmailCollector" bad_bot SetEnvIfNoCase 사용자 에이전트 "^EmailSiphon" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebBandit" bad_bot SetEnvIfNoCase 사용자 에이전트 "^EmailWolf" bad_bot SetEnvIfNoCase 사용자 에이전트 "^ExtractorPro" bad_bot SetRbot SetEnvIfNoCase 복사 SetEnvIfNoCase User-Agent "^Crescent" bad_bot SetEnvIfNoCase User-Agent "^Wget" bad_bot SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot SetEnvIfNoCase User-seBotAgentIf bad_bot ^Teleport" bad_bot SetEnvIfNoCase 사용자 에이전트 "^TeleportPro" bad_bot SetEnvIfNoCase 사용자 에이전트 "^MIIxpc" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Telesoft" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Website Quester" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebZip" bad_bot SetEnvIfNoCase 사용자 에이전트 "^moget/2.1" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebZip/4.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebSauger" bad_bot SetEnvIfNoC SetEnvIfNoCase 사용자 에이전트 "^NetAnts" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Mister PiX" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebAuto" bad_bot SetEnvIfNoCase 사용자 에이전트 "^TheNomad" bad_bot SetEnvIfNoCase 사용자-에이전트 "^WEW SetEnvIfNoCase 사용자 에이전트 "^RMA" bad_bot SetEnvIfNoCase 사용자 에이전트 "^libWeb/clsHTTP" bad_bot SetEnvIfNoCase 사용자 에이전트 "^asterias" bad_bot SetEnvIfNoCase 사용자 에이전트 "^httplib" bad_bot SetEnvIfNoCase SetEnvIfNoCase 사용자 에이전트 "^turingEnv 에이전트 "^spanner" bad_bot SetEnvIfNoCase 사용자 에이전트 "^InfoNaviRobot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Harvest/1.5" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Bullseye/1.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Mozilla 황소의 눈; Windows 95)" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Crescent Internet ToolPak HTTP OLE 제어 v.1.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^CherryPickerSE/1.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^CherryPicker/1.0" bad_bot Set WebBandit/3.50" bad_bot SetEnvIfNoCase 사용자 에이전트 "^NICERsPRO" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Microsoft URL 컨트롤 - 5.01.4511" bad_bot SetEnvIfNoCase 사용자 에이전트 "^DittoSpyder" bad_bot SetEnvgentNoCase 사용자-A bad_bot SetEnvIfNoCase 사용자-A bad_bot 에이전트 "^WebmasterWorldForumBot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^SpankBot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^BotALot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^lwp-trivial/1. 34" bad_bot SetEnvIfNoCase 사용자 에이전트 "^lwp-trivial" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Wget/1.6" bad_bot SetEnvIfNoCase 사용자 에이전트 "^BunnySlippers" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Microsoft URL 제어.8 16.0" 사용자 에이전트 "^URLy 경고" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Wget/1.5.3" bad_bot SetEnvIfNoCase 사용자 에이전트 "^LinkWalker" bad_bot SetEnvIfNoCase 사용자 에이전트 "^cosmos" bad_bot SetEnvIfNoCase 사용자 에이전트 "^moget" bad_bot 사용자 에이전트 "^hloader" bad_bot SetEnvIfNoCase 사용자 에이전트 "^humanlinks" bad_bot SetEnvIfNoCase 사용자 에이전트 "^LinkextractorPro" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Offline Explorer" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Mata Hari"If bad_bot Set "^LexiBot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Web Image Collector" bad_bot SetEnvIfNoCase 사용자 에이전트 "^The Intraformant" bad_bot SetEnvIfNoCase 사용자 에이전트 "^True_Robot/1.0" bad_bot SetEnvIfNoCase 사용자봇 봇 SetAgent "^True_EnRobot" "^블로파이 sh/1.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^JennyBot" bad_bot SetEnvIfNoCase 사용자 에이전트 "^MIIxpc/4.2" bad_bot SetEnvIfNoCase 사용자 에이전트 "^BuiltBotTough" bad_bot SetEnvIfNoCase 사용자 에이전트 "^ProPowerBot/2" ^BackDoorBot/1.0" bad_bot SetEnvIfNoCase 사용자 에이전트 "^toCrawl/UrlDispatcher" bad_bot SetEnvIfNoCase 사용자 에이전트 "^WebEnhancer" bad_bot SetEnvIfNoCase 사용자 에이전트 "^TightTwatBot" bad_bot SetEnvIfNoCase 사용자-에이전트 Bad_bot SetEnvIfNoCase 사용자-에이전트 BadIfCbotsu VCI WebViewer VCI WebViewer Win32" bad_bot SetEnvIfNoCase User-Agent "^VCI" bad_bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot SetEnvIfNoCase User-Agent gathere "^"Open bad_bot -에이전트 "^Openfind" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Xenu" Link Sleuth 1.1c" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Xenu"s" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Zeus" bad_bot SetEnvIfNoCase 사용자 에이전트 & 태클/v1.01"b ad_bot SetEnvIfNoCase 사용자 에이전트 "^RepoMonkey" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Webster Pro" bad_bot SetEnvIfNoCase 사용자 에이전트 "^IfNoCase 사용자 에이전트" badEroCraw ^LinkScan/8.1a Unix" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Keyword Density/0.9" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Kenjin Spider" bad_bot SetEnvIfNoCase 사용자 에이전트 "^Cegbfeieh" bad_bot 주문 허용, 거부 env=bad_bot의 모든 거부에서 허용

언어별 리디렉션

RewriteCond %(HTTP:Accept-Language) (ru) RewriteRule의 RewriteEngine .* WHERE [L]

다른 사이트의 링크를 통한 이미지 다운로드 방지

REFERER 없는 전환 포함, 즉 주소가 브라우저 행에 표시될 때.

RewriteCond %(HTTP_REFERER) !^$ RewriteCond %(HTTP_REFERER) !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ SEND_WHERE에서 RewriteEngine

RewriteCond %(HTTP_REFERER) !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ SEND_WHERE의 RewriteEngine

특정 리퍼러가 있는 사용자 차단

사용자가 특정 사이트에서 귀하의 사이트로 이동하지 못하도록 하려면 비활성화할 수 있습니다.

RewriteCond %(HTTP_REFERER) Banurl1.com RewriteCond %(HTTP_REFERER) Banurl2.com RewriteRule의 RewriteEngine .* - [F]

금지된 URL1.com 및 Banurl2.com은 금지된 사이트의 예입니다.

PHP 업로드 파일 크기 제한, 최대 요청 크기 및 최대 스크립트 실행 시간

업로드된 파일 크기:

php_value 업로드_최대_파일 크기 15M

PHP에서 업로드할 수 있는 최대 요청 크기:

php_value post_max_size 10M

스크립트 실행 시간:

php_value max_execution_time 240

스크립트가 입력된 데이터를 구문 분석하는 시간:

php_value max_input_time 180

IE의 출력 모드 지정

X-UA 호환 헤더 설정:

헤더 세트 X-UA 호환 "IE=Edge"

설정 변경:인코딩 수락

검색 엔진 최적화 및 페이지 로드 시간 단축을 위해 Google은 헤더를 Vary: Accept-Encoding으로 설정하는 것이 좋습니다.

HTTP/1.1 Vary 응답 헤더를 통해 서버는 Vary에 지정된 헤더가 요청 헤더와 일치하는 경우 유효성 검사 없이만 캐시된 리소스를 사용할 수 있음을 나타낼 수 있습니다. 값: Accept-Encoding, Host, User-Agent, Accept-Language.

헤더 추가 Vary: Accept-Encoding

모든 도메인에 대한 공통 이미지 파일(전역 별칭)

별칭 ​​/javascripts /usr/share/javascript/ 옵션 FollowSymLinksMultiViews icon.png와 같은 공통 파일을 /usr/share/javascript/ 디렉토리에 넣고 /etc/javascript-common/javascript-common.conf 파일에 Alias ​​​​/apple-touch-icon-precomposed.png / 줄을 추가합니다. usr/공유/자바스크립트/icon.png

.doc을 다운로드할 때 .docx 파일이 브라우저에서 이해할 수 없는 인코딩으로 열립니다.

인코딩이 이해할 수 없는 브라우저에서 .doc, .docx 파일을 열고 마우스 왼쪽 버튼을 클릭할 때 파일을 저장하고 열지 않으려면 .htaccess로 작성해야 합니다.

AddType 응용 프로그램/강제 다운로드 문서 AddType 응용 프로그램/강제 다운로드 docx AddType 응용 프로그램/강제 다운로드 xls AddType 응용 프로그램/강제 다운로드 xlsx

보안 https 연결로 리디렉션

https를 사용 중이고 모든 사용자가 https로 리디렉션되도록 하려면 다음 코드가 도움이 될 것입니다.

RewriteEngine On RewriteCond %(HTTPS) !on RewriteRule(.*) https://%(HTTP_HOST)%(REQUEST_URI)

htaccess를 사용하여 쿠키가 설정된 경우 액세스

로그인이 admin 사이트에 있고 로그인이라는 쿠키에 설정되어 있으면 외부인의 모든 디렉토리에 대한 액세스를 쉽게 차단할 수 있습니다. 이렇게 하려면 이 디렉터리(폴더)에 다음 내용으로 .htaccess 파일을 만듭니다.

RewriteCond %(HTTP_COOKIE)에서 RewriteEngine !login=admin RewriteRule .* http://%(HTTP_HOST)/

동일한 원칙으로 관리자를 제외한 모든 사람의 유지 보수 작업을 위해 사이트를 닫을 수 있습니다.

http 304 응답을 구현하기 위해 "If-Modified-Since" 및 "If-None-Match" 헤더에 액세스

PHP가 Apache 모듈로 설치되지 않은 경우 "If-Modified-Since" 및 "If-None-Match" 헤더에 액세스하려면 웹사이트의 루트 디렉토리에 다음 .htaccess 파일을 배치해야 합니다.

RewriteRule .*에서 RewriteEngine - RewriteRule .* -

그 후에 필요한 헤더는 $_SERVER["HTTP_IF_MODIFIED_SINCE"] 및 $_SERVER["HTTP_IF_NONE_MATCH"]로 사용할 수 있습니다.

"If-Modified-Since" 및 "If-None-Match" 헤더는 이 페이지에 대한 이전 요청에서 응답에서 "Last-Modified" 헤더를 받지 못한 경우 브라우저에서 전송되지 않습니다. 웹 서버. 또한 웹 애플리케이션에서 기본 설정으로 세션을 사용할 때 지정된 헤더도 브라우저에서 전송되지 않습니다. 브라우저의 이러한 동작을 방지하려면 세션을 시작하기 전에 "private_no_expire" 매개변수를 인수로 전달하여 session_cache_limiter 함수를 실행해야 합니다.

session_cache_limiter("private_no_expire"); 세션 시작();

또한 주제에 대한 추가 정보를 찾을 수 있습니다.

www.egoroff.spb.ru - 리디렉션의 예
htaccess.net.ru - htaccess에 대한 추가 정보.

"1C-Bitrix: 사이트 관리"는 설정(설치) 중에 지정한 모든 수준의 권한으로 작동합니다.

제품이 지정된 폴더 및 파일과 함께 올바르게 작동하려면 CHMOD(작성 및 생성), 파일에 설정해야 합니다. / 비트릭스/PHP_상호 작용/dbconn.PHP다음 상수:

이것은 대부분의 호스팅에서 일반적인 권한 설정입니다( 0644 - 파일의 경우 0755 - 폴더용). 업무에 문제가 있으시면 연락주세요 기술적 지원당신의 호스팅.

명령을 사용하여 필요한 권한 수준을 독립적으로 설정할 수 있습니다. CHMOD콘솔 모드에서.

다음 호출은 파일과 폴더 모두에 대한 권한 수준을 설정합니다.

다음 구문을 사용하여 폴더에 대한 권한을 별도로 설정할 수 있습니다.

찾기. - 유형 d - exec chmod 0755() ";"

폴더 및 파일에 대해 다른 권한을 설정해야 하는 경우 다음 스크립트를 실행하십시오.

정의("BX_FILE_PERMISSIONS", 0644);

정의("BX_DIR_PERMISSIONS", 0755);

함수 chmod_R($경로) (

$핸들 = opendir($경로);

동안 (거짓!== ($file = readdir($handle))) (

if (($file!== ".") && ($file!== "..")) (

if (is_file($path."/".$file)) (

chmod($경로. "/" . $파일, BX_FILE_PERMISSIONS);

chmod($경로. "/" . $파일, BX_DIR_PERMISSIONS);

chmod_R($경로. "/" . $파일);

closeir($handle);


$경로=디렉토리명(__FILE__);

파일과 폴더에 대해 재귀적으로 권한을 별도로 설정하려면 일부 프로그램을 사용할 수 있습니다. FTP클라이언트. 예를 들어, 플래시FXP버전 3.xx 이상.

플래시FXP또한 파일과 폴더에 대한 권한을 분리할 수 있지만 권한이 더 느리게 변경됩니다.

해당 플래그의 설정에 주의하십시오.

· 갈라져세트파일그리고폴더속성(파일 및 폴더에 대한 권한을 별도로 설정);

· 적용하다변경 사항에게모두하위 폴더그리고파일(하위 폴더 및 파일에 대한 권한을 재귀적으로 설정).

각 설치에 대해 자체 레벨이 구성됩니다(그림 10.3 및 그림 10.4).

https://pandia.ru/text/80/333/images/image084.gif" width="353" height="310 src=">

쌀. 10.4 폴더 권한 설정

메모:기준 치수 구조 관리시스템 수준에서 설정된 파일 및 폴더에 대한 액세스 권한을 볼 수 있습니다(그림 10.5).

소유자" href="/text/category/vladeletc/" rel="bookmark">소유자 및 사용자 그룹(*nix용).

파일 사용. htaccess

이번 장웹 서버를 구성하는 방법에 대해 설명합니다. 아파치파일을 사용하여 .ht액세스.

대부분의 경우 서버 사용자는 서버 구성 파일( httpd. 회의) 모든 사용자에게 적용됩니다. 파일 .ht액세스사이트에만 영향을 미치는 구성을 변경할 수 있습니다.

파일 설정을 하려면 .ht액세스서버 구성 파일에서 시스템이 무시하지 않았습니다. httpd. 회의사용 허가 .ht액세스.. 이 권한에 대한 지원을 확인하십시오.

파일 .ht액세스디렉토리에 적용되는 지시문을 포함합니다. 주어진 파일뿐만 아니라 이 디렉토리의 모든 하위 디렉토리에 있습니다. 만약 .ht액세스가 서버의 루트 디렉터리에 있는 경우 해당 파일이 있는 디렉터리를 제외한 전체 서버에 효과가 적용됩니다. .ht액세스. 파일 지시문 .ht액세스찾은 순서대로 적용됩니다. 따라서 지정된 디렉토리의 파일 지시문은 디렉토리 트리의 상위 디렉토리에 있는 지시문보다 우선합니다.

파일을 변경할 때 .ht액세스서버를 다시 시작할 필요가 없습니다. 파일 .ht액세스서버에 접속할 때마다 확인되므로 변경 사항이 적용된 직후에 적용됩니다. 파일은 서비스 파일이므로 웹 브라우저에서 사용자가 사용할 수 없습니다.

일반적으로 파일 구문은 .ht액세스기본 구성 파일의 구문과 유사합니다. 그러나 파일 지시문의 효과는 지시문에 의해 제한될 수 있습니다. 재정의 허용. 어떤 유형의 파일 지시문을 결정합니다. .ht액세스이전 액세스 설정을 무시할 수 있습니다.

메모:설치 중 사전 확인 단계는 파일 처리를 확인합니다. .ht액세스.

제공된 제품에서 파일 .ht액세스기본적으로 다음 지시문이 포함됩니다.

옵션 - 인덱스

오류 문서 404 /404.php

#php_flag allow_call_time_pass_reference 1

#php_flag 세션. use_trans_sid 꺼짐

#php_value display_errors 1

php_value mbstring.php_value func_overload 2

php_value mbstring.php_value internal_encoding UTF-8

옵션 +FollowSymLinks

다시 쓰기 엔진 켜기

RewriteRule.* -


RewriteCond %(REQUEST_FILENAME) !-f

RewriteCond %(REQUEST_FILENAME) !-l

RewriteCond %(REQUEST_FILENAME) !-d

RewriteCond %(REQUEST_FILENAME) !/bitrix/urlrewrite. PHP$

RewriteRule ^(.*)$ /bitrix/urlrewrite. PHP[L]

디렉토리 인덱스 인덱스. php 인덱스. HTML

만료일에 활성

ExpiresByType 이미지/jpeg "액세스 플러스 3일"

ExpiresByType image/gif "액세스 플러스 3일"

메모:주석 처리를 활성화하려면 PHP지시문, 주석 표시( # ) 줄의 시작 부분에. 귀하의 서버가 아파치권한이 설정되지 않았습니다. PHP-flags, 이러한 지시문을 실행하면 내부 오류(500)가 발생합니다. 오류가 발생하면 각 명령의 시작 부분에 기호를 배치하여 지시문을 다시 주석 처리하십시오. # .

타인을 위해 PHP주석 기호( # ), 필요한 모듈의 존재 여부 확인 추가 아파치시스템에서. 이러한 지시문을 실행해도 시스템에 오류가 발생하지 않습니다.

· PHP지령 php_flag 세션. use_trans_sid 꺼짐사이트의 링크에서 세션 식별자 대체를 비활성화합니다.

· 의미 PHP깃발 php_value display_errors동일 1 , 오류 메시지를 표시할 수 있는 권한이 활성화되었음을 나타냅니다. 지시문 php_value error_reporting메시지를 트리거할 오류 수준을 결정합니다. 지정된 지시문을 사용하여 인터프리터의 출력 모드를 구성할 수 있습니다. PHP오류 메시지.

지시 php_value mbstring.php_value func_overload 2그리고 php_value mbstring.php_value internal_encoding UTF-8라이브러리 설정 관리 mbstring.

블록 지시문 IfModule mod_rewrite. 씨에 대한 규칙 설정입니다. mod_rewrite.

지령 만료일에 활성이미지 캐싱이 포함되어 있어 사이트 페이지에 다시 액세스할 때 로딩 속도를 높일 수 있습니다. 지시 ExpiresByType 이미지/jpeg "액세스 플러스 3일"그리고 ExpiresByType image/gif "액세스 플러스 3일", 차례로 이미지 형식과 캐싱이 수행될 기간을 정의합니다. 기본적으로 이미지는 다음 형식으로 캐시됩니다. *.jpeg그리고 *.gif 3일 동안.

메모:파일을 변경한 후 .ht액세스 UNIX 형식으로 저장해야 합니다(FAR 셸 옵션 "UNIX 텍스트로 저장"의 경우).

서버 오류

500 내부 서버 오류

서버 오류는 다양한 원인에 의해 발생할 수 있으므로 진단이 상당히 복잡하고 시간이 많이 걸립니다. 이것은 "1C-Bitrix: 사이트 관리" 오류가 아닙니다. 시스템 리소스 제한으로 인해 공유 호스팅에서 서버 오류가 자주 발생합니다.

서버 오류가 발생하면 먼저 서버 파일을 확인해야 합니다. 오류. 통나무. 이 파일에는 오류 코드가 있는 줄이 포함될 수 있습니다.

· 서버 오류의 일반적인 예는 호스팅에 허용된 권한을 초과할 수 있습니다.

예를 들어, 서버에서 실행이 허용되지 않는 속성이 있는 파일을 실행하려고 시도합니다(예: 파일에 속성이 있습니다. 0755 , 허용 0711 ).

· 또한 가능한 원인실행에 시간 제한이 있을 수 있습니다 PHP-스크립트. 또는 시스템에 파일 등을 쓰거나 읽을 수 있는 권한이 없습니다.

· 내부 서버 오류의 또 다른 일반적인 원인은 서버 구성 위반 또는 파일과 같이 승인되지 않은 명령을 사용하려는 시도입니다. .ht액세스. 이 경우 해당 파일에서 해결되지 않은 지시문이 포함된 행을 주석 처리하거나 삭제해야 합니다(예: .ht액세스).

메모:만약에 PHP처럼 작동 CG, 서버의 500 오류는 치명적인 오류로 인해 발생할 수 있습니다. PHP. 이 경우 다음을 확인하는 것이 좋습니다. 프로그램 코드오류를 진단합니다.

공유하다