모드 재작성을 설치 중입니다. Apache에서 Mod 재작성 모듈 활성화

/ 윈도우 7

마지막으로 온라인 상점을 방문했을 때를 떠올려보세요. 원하는 제품을 찾으면 다음과 같은 URL이 표시될 것입니다.

이는 이 사이트의 개발자가 다양한 제품 카테고리에 대해 별도의 디렉토리를 설정하는 데 많은 시간을 소비했기 때문이 아니라 mod_rewrite라는 편리한 모듈 덕분입니다. 이 모듈을 사용하면 사용자 정의 및 단순화된 URL을 만들 수 있습니다. URL은 실제로 다음과 같습니다.

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

이 가이드에서는 이 모듈 활성화, .htaccess 페이지 생성 및 사용, URL 재작성 설정을 다룹니다.

요구사항

또한 먼저 Apache를 설치해야 합니다. 을 위한 빠른 설치 Ubuntu에서 이 웹 서버의 명령을 사용하십시오.

sudo apt-get 설치 apache2

1: mod_rewrite 활성화

먼저 mod_rewrite를 활성화해야 합니다. 매우 간단합니다.

sudo a2enmod 다시 쓰기

이 명령은 모듈을 활성화하거나, 모듈이 이미 활성화된 경우 "모듈 재작성이 이미 활성화되었습니다"라는 메시지를 표시합니다.

2: .htaccess란 무엇입니까?

모듈이 활성화되면 사이트 디렉터리에 .htaccess 파일을 생성하여 링크 재작성을 구성할 수 있습니다.

.htaccess 파일은 다음과 같습니다. 미세 조정서버 구성 파일을 변경할 필요 없이 사이트를 사용할 수 있습니다. 파일 이름을 시작하는 점은 파일이 숨겨져 있음을 의미합니다.

또한 .htaccess 파일의 설정은 이 파일이 위치한 디렉터리의 모든 파일과 하위 디렉터리에 영향을 미치기 때문에 파일의 위치가 중요합니다.

다음을 사용하여 .htaccess 파일을 만들 수 있습니다. 텍스트 편집기, FTP 클라이언트를 사용하여 사이트에 업로드합니다.

참고하세요: 파일은 정확히 .htaccess로 호출되어야 합니다. 파일 이름에는 추가 확장자가 포함되어서는 안 됩니다.

또는 이 명령을 사용하여 터미널을 통해 example.com을 대체하여 .htaccess 파일을 생성할 수 있습니다. 도메인 이름대지.

.htaccess 파일 포함

.htaccess 파일이 재정의되도록 허용하려면 표준 설정사이트에서 구성 파일을 엽니다.

메모: 이 경우 높은 sudo 권한이 필요합니다.

sudo nano /etc/apache2/sites-available/default

이 파일에서 다음 섹션을 찾아 AllowOverride 줄의 값을 변경합니다(None을 All로 교체). 결과적으로 섹션은 다음과 같이 표시됩니다.


옵션 색인 FollowSymLinks MultiViews
모두 무시 허용
주문 허용, 거부
모두에게 허용하다

변경 사항을 저장하고 파일을 닫은 후 Apache 서버를 다시 시작합니다. 이제 .htacess 파일을 모든 서버 사이트에서 사용할 수 있습니다.

sudo 서비스 apache2 다시 시작

이제 사이트의 URL을 다시 작성할 준비가 되었습니다.

3: URL 재작성

전체 URL 재작성 작업은 .htaccess 파일에서 수행됩니다. 일반적으로 모든 URL 재작성 명령은 동일한 패턴을 따릅니다.

RewriteRule 패턴 대체

이 명령에 사용된 옵션은 다음과 같습니다.

  • RewriteRule: 필요한 지시어를 설정할 수 있는 섹션입니다.
  • 패턴: 정규식을 사용하여 원하는 URL을 해석하는 섹션입니다. 이 튜토리얼에서는 정규식을 다루지 않습니다. 일부 유용한 정보이 주제에 대한 정보는 Apache 사이트에서 찾을 수 있습니다.
  • 대체: 페이지의 실제 URL을 표시합니다. 이 링크는 PHP 매개변수 또는 긴 숫자 시퀀스로 구성되어 기억하기 어렵습니다(예: www.bestshop.com/gadgets.php?innovation=laptops).
  • 선택적 플래그: 플래그는 표현식의 동작을 변경할 수 있는 RewriteRule 지시어 끝에 있는 태그입니다. 일부 일반적인 플래그: [F]는 URL을 허용하지 않거나, 대문자를 무시하거나, 사용된 리디렉션 코드를 제어합니다. [L]은 이것이 시리즈의 마지막 규칙임을 나타냅니다.

URL 재작성 예

예 1: 페이지 A 열기 - 페이지 B로 이동합니다.

이는 URL 재작성의 가장 기본적인 예입니다. 사이트 방문자가 브라우저에 하나의 URL을 입력했지만 다른 URL로 리디렉션됩니다. 이 동작을 구성하려면 이 섹션의 지침을 따르십시오.

시작하려면 두 개의 웹사이트 페이지를 만드세요. 예를 들어, 첫 번째 항목은 사과(apples.html)에 관한 것이고 두 번째 항목은 오렌지(oranges.html)에 관한 것입니다.

다음 코드를 복사하세요.



사과


이 페이지는 사과에 관한 것입니다



그런 다음 두 번째 페이지를 만듭니다( 이 경우, 오렌지 전용 페이지). 이렇게 하려면 이 코드 블록의 Apple을 Orange로 바꾸면 됩니다.

그런 다음 .htaccess 파일을 엽니다.

sudo nano /var/www/example.com/.htaccess

다음 URL 재작성 명령을 추가합니다.

RewriteEngine 켜짐
RewriteRule ^oranges.html$ apples.html

파일을 저장하고 닫습니다.

그런 다음 /oranges.html 페이지를 방문하면 /apples.html 페이지의 정보가 포함됩니다.

위의 명령을 자세히 살펴보겠습니다.

  • ^oranges.html: 원하는 페이지가 시작되는 방법을 지정합니다. 캐럿(^)은 줄의 시작을 나타냅니다. 즉, URL을 다시 작성해야 하는 페이지가 다르게 시작된 경우(예: oranges.html 대신 oranges_1.html) 다시 쓰기 규칙과 일치하지 않으며birds.html로 리디렉션되지 않습니다.
  • $: 달러 기호는 URL 끝에 위치합니다. 다시 말하지만, 문자열이 다르게 끝나는 경우(예: 선언된 마지막 문자 뒤에 문자가 포함된 경우) 웹 페이지는 다시 쓰기 규칙에 의해 인식되지 않습니다.
  • apples.html: 브라우저가 이 페이지로 트래픽을 전달합니다.

예 2: URL의 하위 디렉터리인 매개변수

URL을 확인하세요:

http://example.com/results.php?products=apple

다음과 같이 훨씬 더 명확하게 표시됩니다.

http://example.com/products/apple

이렇게 하려면 .htaccess에 다음 줄을 추가해야 합니다.

RewriteEngine 켜짐
RewriteRule ^products/(+)/?$ results.php?products=$1

이 줄은 다음 옵션으로 구성됩니다.

  • ^products: 이 경우 리디렉션하려면 URL이 products라는 단어로 시작해야 합니다(이는 도메인 뒤의 텍스트에만 적용됩니다). 다시 말하지만, URL이 다르게 시작하면 규칙이 적용되지 않습니다.
  • (+): 괄호 안에 있는 이 텍스트는 URL이 모든 문자로 구성될 수 있음을 나타냅니다. 더하기 기호는 대괄호 안에 하나 이상의 문자가 포함될 수 있음을 나타냅니다.
  • /?$: 달러 기호는 줄의 끝을 표시합니다. 물음표줄 끝에 슬래시를 넣을 수 있습니다(선택 사항임).
  • : 규칙이 모든 문자의 대소문자를 무시해야 함을 나타내는 문구 끝에 있는 플래그입니다.

예 3: 클린 링크 설정

이 기능은 사이트의 URL이 너무 길거나 복잡한 경우에 유용합니다.

예를 들어 다음 URL을 사용할 수 있습니다.

http://example.com/results.php?products=produce&type=fruit&species=apple

http://example.com/produce/fruit/apple

이렇게 하려면 .htaccess에 다음 줄을 추가해야 합니다(그런데 .htaccess에는 이러한 섹션을 무제한으로 포함할 수 있습니다).

RewriteEngine 켜짐
RewriteRule ^(고기|생산|유제품)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

이 코드를 더 자세히 살펴보겠습니다.

  • 사각형(^ 기호)은 표현식의 시작을 나타냅니다.
  • (meat|produce|dairy): 표시할 수 있는 매개변수를 제한하려면 괄호 안에 허용되는 값만 지정합니다(이 경우 육류, 농산물, 유제품). URL에 괄호로 묶이지 않은 매개변수가 포함되어 있으면 다시 작성되지 않습니다.
  • ([^/.]+)는 캐럿 뒤의 문자(이 경우 슬래시와 마침표)를 제외한 모든 문자를 슬래시로 쓸 수 있음을 나타냅니다.
  • results.php?products=$1&type=$2&species=$3: 괄호 안의 각 값이 추출되어 대체 부분의 더 긴 URL에 삽입됩니다. $1은 첫 번째 괄호, $2 – 두 번째, $3 – 각각 세 번째 괄호를 나타냅니다.

기사의 계속을 찾을 수 있습니다.

태그: ,

이 튜토리얼에서는 Apache 2와 mod_rewrite 모듈을 사용하여 URL 재작성을 관리하는 방법을 배웁니다. 이 모듈을 사용하면 사람이 읽을 수 있는 경로를 코드 친화적인 쿼리 문자열로 변환하거나 추가 조건에 따라 URL을 리디렉션하여 보다 깔끔한 방식으로 URL을 다시 작성할 수 있습니다.

이 가이드는 두 부분으로 나누어져 있습니다. 첫 번째는 예제 웹사이트를 설정하고 간단한 재작성 예제를 보여줍니다. 두 번째 부분에는 일반적으로 사용되는 재작성 규칙에 대한 두 가지 심층적인 예가 포함되어 있습니다.

전제 조건

이 가이드에 따르면 다음이 필요합니다.

  • 하나 데비안 서버 8 초기 서버 설정과 함께 설치됩니다.
  • 기사에 따라 서버에 Apache 2가 설치되었습니다.

1단계 - mod_rewrite 활성화

먼저 mod_rewrite를 활성화해야 합니다. 사용 가능하지만 그물에 포함되어 있지 않습니다. 아파치 설치 2.

Sudo a2enmod 재작성

모듈을 활성화하거나 모듈이 이미 활성화되어 있음을 경고합니다. 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

이제 mod_rewrite가 완전히 활성화되었습니다. 다음 단계에서는 리디렉션에 대한 다시 쓰기 규칙을 정의하는 데 사용할 .htaccess 파일을 만듭니다.

2단계 - .htaccess 설정

.htaccess 파일을 사용하면 서버 구성 파일에 액세스하지 않고도 다시 쓰기 규칙을 변경할 수 있습니다. 이러한 이유로 .htaccess는 웹 애플리케이션 보안에 매우 중요합니다. 파일 이름 앞에 마침표가 있으면 파일이 숨겨집니다.

메모

.htaccess 파일에 배치할 규칙은 서버 구성 파일에 직접 배치할 수도 있습니다. 실제로 공식 Apache 문서에서는 Apache가 서버 구성 파일을 더 빠르게 처리하므로 .htaccess 대신 서버 구성 파일을 사용할 것을 권장합니다.

그러나 이에 간단한 예, 성능 향상은 미미할 것입니다. 또한 .htaccess 규칙을 설정하는 것은 특히 동일한 서버에 여러 웹사이트가 있는 경우 편리합니다. 변경 사항을 적용하기 위해 서버를 재부팅할 필요가 없으며 이러한 규칙을 편집하기 위해 슈퍼유저 권한이 필요하지 않으므로 권한이 없는 계정에서도 유지 관리 및 변경이 가능합니다. 일부 인기 있는 오픈 소스 프로그램 소스 코드, Joomla와 같은 .htaccess 파일을 사용하는 경우가 많습니다. 소프트웨어필요에 따라 추가 규칙을 수정하고 생성합니다.

시작하기 전에 몇 가지 설정을 더 설치하고 보호해야 합니다.

기본적으로 Apache는 다시 쓰기 규칙을 적용하기 위해 .htaccess 파일을 사용하는 것을 허용하지 않으므로 먼저 파일 변경을 허용해야 합니다. nano 또는 선호하는 텍스트 편집기를 사용하여 Apache에서 기본 구성 파일을 엽니다.

Sudo nano /etc/apache2/sites-available/000-default.conf

이 파일 안에는 블록이 있습니다. , 첫 번째 줄부터 시작합니다. 이 블록 안에 다음을 추가하세요. 새 블록구성 파일은 다음과 같습니다. 모든 블록이 올바르게 들여쓰기되었는지 확인하세요.

/etc/apache2/sites-available/000-default.conf

옵션 인덱스 FollowSymLinks MultiViews AllowOverride 모두 모두 필요 허용됨 . . .

파일을 저장하고 닫습니다. 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

Sudo systemctl 재시작 apache2

이제 웹 루트 디렉터리에 .htaccess 파일을 만듭니다.

덮어쓰기를 활성화하려면 새 파일 상단에 이 줄을 추가하세요.

/var/www/html/.htaccess

RewriteEngine 켜짐

파일을 저장하고 종료합니다.

이제 웹 애플리케이션의 라우팅 규칙을 관리하는 데 사용할 수 있는 작동 가능한 .htaccess 파일이 생겼습니다. 다음 단계에서는 다시 작성 규칙을 시연하는 데 사용할 샘플 사이트 파일을 만듭니다.

3단계 - URL 재작성 설정

여기에서는 URL을 실제 코드 경로로 변환하는 기본 URL 재작성을 설치합니다. 구체적으로는 사용자 액세스를 허용하겠습니다. http://your_server_ip/about

웹 루트 디렉터리에 about.html이라는 파일을 만드는 것부터 시작해 보겠습니다.

Sudo nano /var/www/html/about.html

다음 HTML 코드를 파일에 복사한 후 저장하고 닫습니다.

/var/www/html/about.html

회사 소개

회사 소개

http://your_server_ip/about.html 페이지에 액세스할 수 있지만 http://your_server_ip/about에 액세스하려고 하면 오류가 표시됩니다. 404 찾을 수 없음 . 그러나 사용자가 규칙을 다시 작성하는 대신 about을 사용하여 페이지에 액세스하려면 바로 이 기능이 허용됩니다.

RewriteRules는 다음 형식을 따릅니다.

RewriteRule의 일반 구조

RewriteRule 패턴 대체

  • RewriteRule은 지시어를 정의합니다.
  • 패턴은 브라우저가 보는 URL에서 원하는 문자열과 일치하는 정규식입니다.
  • 대체는 실제 URL에 대한 경로, 즉 경로입니다. 파일 서버아파치.
  • 플래그는 규칙 작동 방식을 결정하기 위해 변경할 수 있는 선택적 매개변수입니다.

.htaccess 파일을 엽니다.

Sudo nano /var/www/html/.htaccess

첫 번째 줄 뒤에 빨간색으로 표시된 RewriteRule을 추가하고 파일을 저장합니다.

/var/www/html/.htaccess

RewriteRule ^about$ about.html의 RewriteEngine

이 경우 ^about$은 템플릿이고 about.html은 대체 항목이며 플래그입니다. 우리의 예에서는 다음과 같은 여러 문자를 사용합니다. 특별한 의미:

  • ^는 your_server_ip / 뒤의 URL 시작을 나타냅니다.
  • $는 URL의 끝을 나타냅니다.
  • about은 "about" 문자열과 일치합니다.
  • about.html은 사용자가 액세스하는 실제 파일입니다.
  • 규칙에서 대소문자를 구분하지 않게 만드는 플래그입니다.

이제 브라우저에서 http://your_server_ip/about에 액세스할 수 있습니다. 실제로 위에 표시된 규칙을 사용하면 다음 URL은 about.html을 가리킵니다.

  • http://your_server_ip /about , 규칙 정의 때문입니다.
  • http://your_server_ip /About , 규칙은 대소문자를 구분하지 않기 때문입니다.
  • 원래의 올바른 파일 이름은 항상 작동하므로 http://your_server_ip/about.html입니다.

아래는 그렇지 않습니다:

  • http://your_server_ip /about/ $ 기호를 사용한 후에는 아무것도 할 수 없다는 규칙이 명확하게 명시되어 있기 때문입니다.
  • http://your_server_ip /contact는 규칙의 정보 줄과 일치하지 않기 때문입니다.

이제 다음과 같은 라이브 .htaccess 파일이 생겼습니다. 간단한 규칙, 필요에 맞게 변경하고 확장할 수 있습니다. 다음 섹션에서는 가장 일반적으로 사용되는 지시문의 두 가지 추가 예를 보여줍니다.

예 1 - RewriteRule을 사용하여 쿼리 문자열 단순화

웹 애플리케이션을 자주 사용함 쿼리 문자열, 주소 뒤에 물음표(?)를 사용하여 URL에 추가됩니다. 개별 매개변수는 앰퍼샌드(&)로 구분됩니다. 쿼리 문자열을 사용하여 개별 애플리케이션 페이지 간에 추가 데이터를 전달할 수 있습니다.

예를 들어, PHP로 작성된 검색결과 페이지는 http://example.ru/results.php?item=shirt&author=andreyex와 같은 URL을 사용할 수 있습니다. 이 예에는 두 가지가 있습니다. 추가 매개변수가상의 응용 프로그램 스크립트 result.php: 값이 셔츠이고 작성자가 andreyex 값을 가진 항목을 전달합니다. 애플리케이션은 쿼리 문자열 정보를 사용하여 방문자를 위한 올바른 페이지를 구축할 수 있습니다.

Apache 재작성 규칙은 위와 같이 길고 보기 흉한 링크를 단순화하는 데 자주 사용됩니다. 친숙한 URL, 시각적으로 입력하고 해석하기가 더 쉽습니다. 이 예에서는 위의 링크를 단순화하여 http://example.ru/shirt/andreyex를 만들고 싶습니다. 셔츠와 작성자 및 andreyex 매개변수의 값을 이전 주소로 가져오지만 쿼리 문자열과 스크립트 이름은 없습니다.

이를 구현하는 한 가지 규칙은 다음과 같습니다.

간단한 예

RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex

셔츠/andreyex는 요청된 주소와 명시적으로 일치하며 Apache는 대신 results.php?item=shirt&author=andreyex를 실행하도록 지시받습니다.

플래그는 일반적으로 다시 쓰기 규칙에 사용됩니다. 이는 제공되는 URL에 추가 쿼리 문자열을 추가하도록 Apache에 지시합니다. 이것이 없으면 추가 쿼리 줄은 삭제됩니다. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2

이 방법을 사용하면 원하는 효과를 얻을 수 있지만 요소 이름과 작성자가 모두 규칙에 하드 코딩되어 있습니다. 이는 이 규칙이 바지와 같은 다른 항목이나 구축함과 같은 작성자에 대해서는 작동하지 않음을 의미합니다.

규칙을 보다 일반적으로 만들기 위해 정규식을 사용하여 소스 주소의 일부를 일치시키고 해당 부분을 대체 패턴에 사용할 수 있습니다. 수정된 규칙은 다음과 같습니다.

간단한 예

RewriteRule ^(+)/(andreyex|destroyer|fall|spring) results.php?item=$1&author=$2

대괄호 안의 첫 번째 정규식은 셔츠나 바지와 같이 영숫자 문자와 숫자가 포함된 문자열과 일치하고 일치하는 부분을 변수 $1 로 저장합니다. 괄호 안의 두 번째 표현식 그룹은 andreyex , destroyer , fall 또는 spring 과 정확히 일치하며 일치하는 조각을 $2 로 저장합니다.

일치하는 조각은 이전에 사용했던 하드 코딩된 셔츠 및 andreyex 대신 항목 및 작성자 변수의 결과 URL에 배치됩니다.

위의 내용은 예를 들어 http://example.ru/pants/andreyex를 http://example.ru/results.php?item=pants&author=andreyex로 변환합니다. 이 예는 또한 미래를 위한 것입니다. 단일 규칙을 사용하여 여러 요소와 작성자를 올바르게 다시 작성할 수 있습니다.

예시 2 - RewriteConds를 사용하여 로직이 포함된 조건 추가

재작성 규칙은 제한 없이 항상 차례로 평가되는 것은 아닙니다. RewriteCond 지시어를 사용하면 규칙이 처리되는 시기를 제어하기 위해 다시 쓰기 규칙에 조건을 추가할 수 있습니다. RewriteConds는 다음 형식을 따릅니다.

RewriteCond의 일반 구조

RewriteCond TestString 조건

  • RewriteCond는 RewriteCond 지시어를 정의합니다.
  • TestString은 테스트되는 문자열입니다.
  • 조건은 일치시킬 패턴 또는 조건입니다.
  • 플래그는 조건 및 평가 규칙을 변경할 수 있는 선택적 매개변수입니다.

RewriteCond가 true이면 RewriteRule이 즉시 고려됩니다. 그렇지 않은 경우 규칙이 삭제됩니다. 여러 RewriteCond를 차례로 사용할 수 있으며 기본 동작을 사용하면 모두 평가해야 하며 다음 규칙에서는 고려해야 합니다.

예를 들어, 사이트에 존재하지 않는 파일 및 디렉터리에 대한 모든 요청을 다시 다음으로 리디렉션한다고 가정해 보겠습니다. 홈페이지표준 오류 페이지를 표시하는 대신 404 찾을 수 없음. 이는 다음 규칙 조건을 통해 달성할 수 있습니다.

존재하지 않는 파일 및 디렉터리에 대한 모든 요청을 기본 페이지로 리디렉션

RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule . /

위의 사항을 고려하면:

  • %(REQUEST_FILENAME)은 확인할 문자열입니다. 이 경우 각 요청에 사용할 수 있는 시스템 변수인 요청된 파일 이름입니다.
  • -f는 요청한 이름이 디스크에 존재하고 파일인지 확인하는 기본 제공 조건입니다. ! - 부정 연산자입니다. !-f를 결합하면 지정된 이름이 존재하지 않거나 파일이 아닌 경우에만 true로 평가됩니다.
  • 마찬가지로 !-d는 지정된 이름이 존재하지 않거나 디렉터리가 아닌 경우에만 true로 평가됩니다.

마지막 줄의 RewriteRule은 존재하지 않는 파일 및 디렉터리에 대한 요청에만 적용됩니다. RewriteRule 자체는 매우 간단하며 모든 요청을 사이트의 / 루트로 리디렉션합니다.

결론

mod_rewrite는 사람이 읽을 수 있는 URL을 제공하는 데 효과적으로 사용할 수 있는 유용한 Apache 모듈입니다. 이 학습에서는 RewriteRule 지시문을 사용하여 쿼리 문자열을 포함하여 URL을 리디렉션하는 방법을 배웠습니다. 또한 RewriteCond 지시어를 사용한 URL 리디렉션에 대해서도 배웠습니다.

때때로 사람들은 문제에 직면합니다. Apache 서버가 .htaccess 파일을 읽지 않거나 Apache가 URL을 다시 쓰지 않는데 우리는 구성 파일에서 올바른 다시 쓰기 규칙을 사용하고 있습니다. 이는 다시 쓰기 모듈이 Apache에 포함되어 있지 않기 때문에 발생합니다. 서버에서는 mod_rewrite 모듈이 기본적으로 활성화되어 있지 않으므로 rewrite를 사용하려면 mode_rewrite를 수동으로 활성화해야 합니다. 내 기사 "Debian/Ubuntu에서 Apache용 mod_rewrite 모듈 활성화"에서 이를 수행하는 방법을 설명하겠습니다.

1. Apache2에서 mod_rewrite 모듈 활성화

이를 위해 "a2enmod" 명령을 사용하여 모든 모듈을 활성화합니다. 아파치 웹 서버 2. 따라서 다음 명령을 사용하여 Apache용 mod_rewrite 모듈을 활성화합니다.

$ sudo a2enmod 다시 쓰기

2. 가상 호스트에서 ReWrite를 활성화합니다.

Apache용 ReWrite 모듈을 활성화한 후 가상 호스트에 대한 구성 파일에 "AllowOverride All"을 추가해야 합니다. 이 설정은 기본 Apache 구성 파일을 편집하여 전역적으로 활성화할 수도 있습니다.

옵션 인덱스 FollowSymLinks AllowOverride All

3. Apache2 구성 다시 시작

Apache용 mod_rewrite 모듈을 활성화한 후 Apache2 서버를 다시 시작해야 합니다.

# 서비스 apache2 재시작

이제 "Debian/Ubuntu에서 Apache용 mod_rewrite 모듈 활성화" 항목이 완료되었습니다.

Apache 웹 서버의 이 모듈은 소스 URL을 변환하도록 설계되었지만 HUR(Human Readable URL)을 생성하는 데 자주 사용됩니다. http://example.com/2005/를 사용하세요. 12/ 대신 31/theme.html 이 메커니즘은 뉴스 사이트에서 매우 자주 사용되는 동시에 보안 측면에서도 장점이 됩니다. 사용자는 실제로 어떤 파일(스크립트)에 액세스하는지 알 수 없습니다.

아래의 몇 가지 질문을 살펴보겠습니다.
1. Apache에서 mod_rewrite를 활성화하는 방법은 무엇입니까?
2. 약간의 이론. mod_rewrite 작동 방식.
3. 간단한 예.
4. 스크립트에서는 무엇을 해야 합니까?
5. 무엇을 주는가 이 접근법그리고 일반적으로 mod_rewrite?
6. 가능한 오류.
7. mod_rewrite를 공부한 모교

1. Apache에서 mod_rewrite를 활성화하는 방법은 무엇입니까?

Apache 웹 서버에서 mod_rewrite를 활성화하려면 httpd.conf 파일을 편집해야 합니다.
이렇게 하려면 httpd.conf 파일을 열고 다음 줄을 찾으십시오.

암호
#LoadModule rewrite_module 모듈/mod_rewrite.so

그리고 댓글 삭제하세요

암호
LoadModule rewrite_module 모듈/mod_rewrite.so

그런 다음 웹 서버를 다시 시작합니다.

2. 약간의 이론. mod_rewrite 작동 방식.

일반적으로 방금 mod_rewrite를 접한 프로그래머는 이 메커니즘이 어떻게 작동하는지 완전히 이해하지 못합니다. 이 때문에 오랫동안“어린 시절의 실수에 대해 의아해합니다.

그래서. 우리가 알고 있듯이 소위 GET 요청이 있습니다. http://example.com/2005/12/31/theme.html, 이는 웹 서버(이 예에서는 Apache)로 "제공"됩니다. 서버는 무엇을 합니까? 우선 그는 이 호스트의 설정을 살펴봅니다. 그 후 그는 다음에 무엇을 할지 결정합니다. 메인 페이지의 콘텐츠(예: index.html)를 사용자에게 다시 보내거나 해석을 위해 메인 스크립트 index.php의 코드를 보내거나 404 오류를 반환하는 등의 작업을 수행합니다. etc. index.phtml로 계속 작업한다고 가정해 보겠습니다. 아마 당신은 다음에 무슨 일이 일어날지 이미 알고 있을 것입니다. 서버가 호스트 설정을 확인하는 순간에 집중하겠습니다. 그 수가 많을 수 있습니다. 그러나 서버는 어김없이 루트에서 .htaccess 파일을 찾으려고 시도합니다. (즉시 Apache 구성 파일). mod_rewrite 변환 규칙이 있는 곳은 이 파일입니다(httpd.conf에서도 찾을 수 있습니다). 저것들. 스크립트가 작동하기 전에 URL 변환이 수행된다는 사실로 이어집니다.

알고리즘은 다음과 같습니다.
1. 서버가 GET 요청을 받습니다: http://example.com/2005/12/31/theme.html
2. .htaccess에서 mod_rewrite 변환 규칙을 찾습니다.
3. 변화합니다.
4. 변환 규칙에 따라 index.phtml로 리디렉션됩니다.
5. 스크립트가 작동하기 시작합니다.

3. 간단한 예.

많은 분들이 이 내용을 보셨을 것입니다: http://example.com/2005/12/31/theme.html. 이러한 주소는 뉴스 사이트에서 자주 사용됩니다. 당연히 그들은 이러한 폴더를 모두 가지고 있지 않으며 HTML 파일. 모든 데이터는 스크립트에 의해 처리됩니다. 아래에서는 이러한 변환 옵션 중 하나를 살펴보겠습니다. 바로 말씀드리겠습니다. 많은 옵션이 있습니다. 저는 제가 직접 사용하고 가장 보편적이라고 생각하는 특정 사례를 선택합니다.

암호
RewriteEngine 켜짐
옵션 +심볼릭 링크 따르기
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.phtml

모든 것을 순서대로 살펴 보겠습니다.
연속된 두 개의 RewriteCond는 사이에 AND가 있는 조건입니다.
저것들. 요청한 주소가 실제 주소가 아닌 경우 기존 파일또는 디렉토리를 index.phtml로 전송하십시오. 저것들. 따라서 우리는 http://example.com/2005/12/31/theme.html 요청이 index.phtml 스크립트에 의해 처리되도록 구현했습니다. 이제 전체 질문은 사용자가 /2005/12/31/theme.html을 요청하는 스크립트에서 어떻게 알 수 있느냐는 것입니다.

여기에는 서정적 편차가 있습니다. RewrtiterRule에 대한 몇 마디. 지시어는 매개변수를 고려합니다. 첫 번째 항목(이 경우: ^(.*)$)은 요청된 주소(이 경우: /2005/12/31/theme.html)가 패턴을 만족하는지(이 경우에는 yes) 확인하는 정규식 문자열입니다. , 즉 k. 패턴에는 줄의 처음부터 끝까지 "모든 문자가 0번 이상" 표시됩니다(^(.*)$). 패턴이 만족되면 mod_rewrite는 두 번째 매개변수에 지정된 파일(이 경우 index.phtml)로 요청을 리디렉션합니다.

이제 전체 질문은 스크립트가 "/2005/12/31/theme.html"에 대해 어떻게 아는가입니다. 두 가지 옵션이 있습니다.
첫 번째:

암호
RewriteRule ^(.*)$ index.phtml?$1 [L]

"/2005/12/31/theme.html"은 QUERY_STRING 변수의 index.phtml 스크립트에 전달됩니다. $1은 패턴의 첫 번째 괄호로, http://example.com/?/2005/12/31/theme.html과 동일합니다. 그런데 이런 걸 어디서 본 적 있나요? 아니요. 따라서 우리는 QSA를 키로 사용합니다.

항상 GET 요청("/2005/12/31/theme.html")을 포함하는 서버 변수(스크립트가 액세스할 수 있는) REQUEST_URI가 있습니다. 따라서 index.phtml로 리디렉션하면 REQUEST_URI는 index.phtml 값을 가져와야 하지만 QSA 키는 이를 "/2005/12/31/theme.html"로 대체합니다. 저것들. 물리적으로 index.phtml로 리디렉션하고, 사용자가 “/2005/12/31/theme.html”에 액세스한 스크립트를 논리적으로 표시합니다.

4. 스크립트 만들기

이제 우리는 이미 리디렉션된 스크립트인 index.phtml을 사용하여 작업하고 있습니다. 바로 말씀드리겠지만, 코드는 PHP로 되어 있습니다. 왜냐면... 저는 다른 웹 언어를 잘 못합니다.

그렇게 간단합니다. 이제 이 어레이를 사용하여 작업할 수 있습니다. 더 명확하게 만들기 위해. 비유를 들어보겠습니다. 다음 주소를 가정해 보겠습니다: http://example.com/index.phtml?year=2005&m...y=31&news=theme. 우리가 알고 있듯이 스크립트에서 이러한 매개변수는 $_GET 배열을 통해 사용할 수 있습니다.
따라서 $_GET['year']는 $arr와 동일하고 $_GET['month']는 $arr와 동일하며 $_GET['day']는 $arr와 동일하며 $_GET ['theme' ]는 $arr와 동일합니다(".html"만 잘라내면 됩니다).

5. 일반적으로 이 접근 방식과 mod_rewrite는 무엇을 제공합니까?

첫째로 검색 엔진 http://example.com/?/2005/12/31/theme.html과 같은 URL이 http://example.com/index.phtml?year=2005&m...y=31&news=theme보다 훨씬 좋습니다. , 사용자의 경우에도 동의해야 합니다.

두 번째 요점. mod_rewrite를 사용하면 XSS 공격 가능성이 거의 없어집니다. 포함 버그는 실질적으로 해결되었습니다. 이 예에서는 이것이 눈에 잘 띄지 않지만, 제 말을 믿으십시오. 그렇습니다. 하지만 어쨌든 그것은 모두 당신의 머리에 달려있습니다!!!

세 번째 포인트는 실제로 사용된 기술을 숨기는 것입니다. 이로 인해 사이트 해킹이 부분적으로 더 어려워지지만 이는 고인 연못의 진흙처럼 상한선일 뿐입니다.

6. 가능한 오류

일반적으로 다음과 같은 오류가 발생할 수 있습니다.

404 – 문서를 찾을 수 없습니다. 원인: RewriteRules가 트리거되지 않습니다.
403 - 금지됨 - 액세스가 거부되었습니다. 재작성 규칙에는 액세스할 수 없는 파일(/index.php)로 리디렉션하려는 시도로 인해 발생하는 논리적 오류가 포함되어 있습니다. /in 유닉스 시스템는 당연히 액세스할 수 없는 서버 루트 디렉터리의 경로를 의미합니다.
500 – 내부 서버 오류. 그 이유는 .htaccess 파일의 구문 오류 때문입니다.

7. mod_rewrite를 공부한 모교

개인적으로 이 글이 많은 도움이 되었습니다. 여기 그녀의 초록이 있고 아래에 ZIP 파일이 첨부되어 있습니다. 이 기사는 RTF 형식으로 포함되어 있습니다.

인용하다
“mod_rewrite가 제공하는 주요 이점은 Sendmail에 내재된 구성 가능성과 유연성입니다. 뒷면 mod_rewrite는 Sendmail 고유의 구성 가능성과 유연성을 제공합니다."

브라이언 벨렌도르프

아파치 그룹
“수많은 예제와 문서에도 불구하고 mod_rewrite는 Voodoo입니다. 정말 멋진 부두(Voodoo)지만 여전히 부두(Voodoo)입니다.”

브라이언 무어
[이메일 보호됨]

mod_rewrite의 세계에 오신 것을 환영합니다. 스위스 칼 URL 변환!
이 모듈은 규칙 기반 엔진(정규식 기반 파서)을 사용하여 즉시 URL 변환을 수행합니다. URL 변환을 위한 진정으로 유연하고 강력한 메커니즘을 구현하기 위해 무제한의 규칙과 무제한의 규칙 관련 조건을 지원합니다. 해결 URL은 서버 변수, 환경 변수, HTTP 헤더, 시간, 심지어 다양한 형식의 외부 데이터베이스에 대한 요청을 사용하여 기대에 맞는 정확한 URL 변환을 얻을 수 있습니다.

이 모듈은 서버 컨텍스트(httpd.conf)와 디렉터리 컨텍스트(.htaccess) 모두에서 전체 URL(경로 정보 포함)에서 작동하며 결과적으로 쿼리 문자열의 일부를 생성할 수도 있습니다. 변환된 결과는 내부 처리, 외부 요청 리디렉션 또는 내부 프록시 모듈을 통과할 수도 있습니다.

그러나 이 모든 기능과 유연성에는 복잡성이라는 단점이 있습니다. 따라서 하루 만에 이 전체 모듈을 이해할 것이라고 기대하지 마십시오.
이 모듈은 1996년 4월에 구상 및 작성되었으며 1997년 7월에 Apache Group에 독점적으로 기증되었습니다.

랄프 S. 엥겔샬
[이메일 보호됨]
www.engelschall.com

중요한:

    파일 지원 ".htaccess" Linux 호스팅에서만 사용할 수 있습니다. Windows에서 함수를 호스팅하는 경우 ".htaccess"파일을 실행합니다 웹.구성.

    지원 모듈 ".htaccess" Linux OS 기반의 모든 공유 호스팅 계획에서 사용할 수 있습니다. CMS 설치 시 지원되지 않는다는 메시지가 나타나는 경우 ".htaccess"그냥 무시하세요.

.htaccess 파일이 없습니다. 어떻게 해야 합니까?

Apache 웹 서버를 설정 중이지만 파일이 없는 경우 .htaccess, 그것을 만들고 필요한 지시어를 적어 두십시오.

생성하려면 .htaccess, 지침에 따라 호스팅 제어판에 로그인하십시오. 파일을 찾으십시오. .htaccess기사를 사용하여 사이트 디렉토리에: .

실수로 파일을 삭제한 경우 .htaccess, 복원하세요. 아니면 추가하세요 표준 파일 .htaccess CMS의 경우:

.htaccess 파일이 cPanel에 표시되지 않습니다.

보려면 숨겨진 파일(점으로 시작) cPanel에서 다음을 수행해야 합니다.

모드 재작성을 활성화하는 방법은 무엇입니까?

기준 치수 "mod_rewrite"모두에 존재 관세 계획리눅스 호스팅. 활성화하려면 "mod_rewrite"파일에 추가 .htaccess문자열을 봅니다.

© 2024 ermake.ru - PC 수리 정보 - 정보 포털