Apache 2.2에서 mod_rewrite를 활성화하는 방법


474

Vista 컴퓨터에 Apache 2.2를 새로 설치했는데 mod rewrite를 제외한 모든 것이 제대로 작동합니다.

나는 주석을 해제했습니다

LoadModule rewrite_module modules/mod_rewrite.s

하지만 내 재 작성 규칙 중 어느 것도 작동하지 않습니다.

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

내가 사용하는 모든 규칙이 호스팅에서 작동하고 있으므로 확인해야합니다. 제 질문은 아파치 구성에 숨겨진 항목이 있습니까? 모드 재 작성을 차단할 수 있습니까?


1
실제로 문제는, $ {DOCUMENT_ROOT}의 호스팅에 확인했다 루트 디렉토리에 저를 지적하기 때문에 내가 잘못된 경로를하였습니다 만, 지역에 잘못된 내가 이미 가지고 있던 문제 않네 만한다 RewriteEngine에 .. 그래서
야쿱 아놀드

허용 된 답변을 이것으로 변경할 수 있습니까 ? 현재 받아 들여진 답변의 저자는 충분하지 않다는 것을 인정했습니다.
Shadow Wizard is Ear for You

1
Ubuntu 12.04 LTS에서 mod_rewrite를 활성화하는 방법 (데비안에서도 작동해야 함) . 이것은 설치 및 활성화를 보여줍니다. 아래 자습서는 놀랍게도 수행하지 않습니다. (
Sliq

3
AllowOverride FileInfo이 페이지의 모든 답변에서 알 수 있듯이 모든 것을 허용 하는 대신 .htacces 파일에서 mod_rewrite 지시문을 활성화하려는 모든 사람에게 강력히 권합니다 . 이 모든 답변이 제안 된 '솔루션'의 결과를 이해하려고 시도하는 대신 작업대로 오래 걸리는 방식으로 접근하는 것이 슬픈 일입니다. 서버에서 수행중인 작업과 방금 부여한 권한을 제한하는 방법을 이해하십시오 AllowOverride All. RTFM! , 주제에 대해 명확하지 않습니다.
RemyNL

1
@Black httpd.conf라는 Apache 구성 파일에 있습니다. 내 PC에서는 XAMPP와 함께 Apache를 설치했기 때문에 C : \ xampp \ apache \ conf 디렉토리에 있습니다.
Lex Soft

답변:


1005

사용 mod_rewrite하려면 터미널에 다음 명령을 입력하십시오.

sudo a2enmod rewrite

다음에 apache2를 다시 시작하십시오.

sudo /etc/init.d/apache2 restart

또는

sudo service apache2 restart

또는 새로운 통합 시스템 제어 방식에 따라

sudo systemctl restart apache2

그런 다음 원하는 경우 다음 .htaccess파일을 사용할 수 있습니다 .

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

.htaccess파일 (에 배치 된 경우 DocumentRoot)은 파일이 존재하지 않는 한 모든 트래픽을 index.php파일로 리디렉션 DocumentRoot합니다.

따라서 다음 디렉토리 구조가 있고 httpdocs는 DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

httpdocs에 존재하는 모든 파일은 .htaccess위 의 그림을 사용하여 요청자에게 제공 되지만 다른 모든 파일은로 리디렉션됩니다 httpdocs/index.php. 의 응용 프로그램 파일에 includes/app액세스 할 수 없습니다.


15
이 아이디어는 UNIX CLI에는 맞지만 명령은 Debian 기반 Linux 배포판에서만 작동하며 OP의 Windows 환경에서는 작동하지 않습니다.
Jason Rikard

17
a2enmod 다시 쓰기 작업을 수행
Dr Casper Black

98
또한 참고 : 당신은 또한 당신의 위치의 구성이 있는지 확인해야합니다 AllowOverride All위해서는 .htaccess파일을 전혀 읽을 수.
Adam Rosenfield 2016 년

2
@Dennis 당신은 a2dismod 재 작성을 사용할 수 있습니다
Jonathan Mayhak

3
a2enmod rewrite창문에서 어떻게 사용할 수 있습니까?
Naman

229

내 상황에는

RewriteEngine On

.htaccess모듈에서로드 된 모듈과 함께 작동하지 않습니다.

내 문제에 대한 해결책은 vhost 항목을 편집하여 inlcude하는 것입니다.

AllowOverride all

에서 <Directory>해당 사이트에 대한 섹션을 참조하십시오.


10
실제로,도로 a2enmod rewriteRewriteEngine On.htaccess-의 존재 AllowOverride allVirtualHost의 파일에 작동을 방지 할 수 있습니다 -이로 변경, 저를 잡은 것입니다 AllowOverride all: 마법처럼 일
HeavenCore

9
초보자입니다 .. VirtualHost 파일은 어디에 있습니까?
davneet

3
이것은 갈 길입니다 ... 나는 이것을 제외한 다른 모든 것을 가졌습니다.
arrayown

2
AllowOverride지시어는 "에서 허용되는 지침의 종류를 결정 .htaccess파일을". 또한, "이 지시어로 설정하면 None, 다음 .htaccess파일은 완전히 무시됩니다.이 경우 서버도 읽으려고하지 않습니다 .htaccess파일 시스템에서 파일을." 공식 문서 : httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck

이 문제가 해결되었습니다 .WordPress 예쁜 영구 링크가 제대로 작동하지 않는 문제가있었습니다. 당신이 경우 a2enmod rewrite다음 '에 AllowOverride 모든'에에서 VirtualHost 파일 변경 '에 AllowOverride 없음'에서 작동합니다. VirtualHosts 파일은 동일한 서버 (및 IP 주소)에 여러 도메인 이름을 실행중인 경우에 적용됩니다. 도메인을 설정하도록 설정했을 것입니다.
Jason Preston

83

설정을 시도하십시오 : AllowOverride All.


두 번째로 가장 일반적인 문제는 mod rewrite를 활성화하지 않은 것 a2enmod rewrite입니다.


이것은 기본 우분투 설치에서 발생하는 문제를 해결하기 때문에 # 1 답변이어야합니다!
Sliq

1
이렇게하면 .htaccess가 다른 아파치 구성을 무시할 수 있습니다. 권장하지 않습니다.
Bhargav Nanekalva

예 :) 이것도 내 문제 였지만 여기 에이 "AllowOverride All"이 /etc/apache2/sites-available/[sitename].conf 및 [sitename-ssl]에 나와 같은 신인에게 설명하는 장소가 있습니다. .conf. 나는 당신 때문에 두 번째 연구를해야했습니다 : D, 그런데 감사합니다!
MetaTron

77

위의 방법으로 작동하지 않으면 / etc / apache2 / sites-enabled / 000-default를 편집하십시오.

거의 당신이 찾을 수있는 상단에

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

변화 AllowOverride None에를AllowOverride All

이것은 나를 위해 일했다


오류 /laravel/public/authors was not found on this server/index.php was not found on this server
Gangaraju로

<디렉토리>를 찾을 수 없음, <VirtualHost * : 80>
Nicolas S.Xu

1
태그 : @ NicolasS.Xu의 <80는 VirtualHost *>이 배치
wimdetr

나는 똑같이했지만 <Directory /var/www/html>이 폴더의 규칙을 적용하기 위해 새 섹션 을 추가했습니다 .
Louis Loudog Trottier

44

우분투에서 :

운영:

a2enmod rewrite

그리고:

service apache2 restart

mod_rewrite 이제 활성화됩니다!


28

문제의 근본을 알고있는 경우이 문제를 해결하는 방법에는 여러 가지가 있습니다.

문제 1

첫째, mod_rewrite.c 모듈이 설치 또는 활성화되어 있지 않은 아파치에 문제가있을 수 있습니다.

이러한 이유로 다음과 같이 활성화해야합니다.

  1. 콘솔을 열고 입력하십시오 :

    sudo a2enmod rewrite

  2. 아파치 서버를 다시 시작하십시오.

    service apache2 restart

문제 2

  1. 위의 작업 외에도 작동하지 않으면 apache conf 파일 (apache2.conf, http.conf 또는 000-default 파일)에서 재정의 규칙을 변경해야 할 수도 있습니다.

  2. "Directory / var / www /"를 찾으십시오.

  3. "Override None"을 "Override All"로 변경하십시오.

문제 3

다시 쓰기 모듈을 찾을 수 없다는 오류가 표시되면 userdir 모듈이 활성화되지 않은 것입니다. 이러한 이유로 활성화해야합니다.

  1. 이것을 콘솔에 입력하십시오 :

    sudo a2enmod userdir

  2. 그런 다음 위에서 언급 한대로 여전히 활성화되지 않은 경우 다시 쓰기 모듈을 활성화하십시오.

이에 대한 자세한 내용을 보려면 다음 사이트를 방문하십시오 : http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


2
문제의 큰 고장.
Banago

AllowOverride All펄 스크립트를 사용하는 것과 같이 너무 많은 위험한 기능을 사용할 수 있으므로 사용하지 마십시오 . 대신 사용AllowOveride Options
Marki555

28

새로운 아파치 버전은 어떤 식 으로든 변경되었습니다. 아파치 버전이 2.4 인 경우로 가야합니다 /etc/apache2/. 라는 파일이 있습니다 apache2.conf. 이 파일을 편집해야합니다 (루트 권한이 있어야 함). 이와 같은 디렉토리 텍스트 변경

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

이제 아파치를 다시 시작하십시오.

service apache2 reload

그것이 효과가 있기를 바랍니다.


이것은 최신 답변입니다.
paulc

1
당신이 2019 이상이면,이 답변을 찬성하십시오 :)
Luiz Cavalcanti

27

터미널을 열고 typin a2enmod rewrite을 사용하면 mod_rewriteApache에서 모듈을 사용할 수 있습니다 .

그런 다음 /etc/apache2/sites-available기본 파일 로 이동하여 편집하십시오. (이를 위해이 파일 및 사이트 사용 가능 폴더에 대한 쓰기 권한이 있어야합니다.)

기존 라인 4 ~ 14로 아래를 교체하십시오.

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

이제 아파치를 다시 시작 /etc/init.d/apache2 restart하거나service apache2 restart

깨끗한 URL 테스트를 다시 수행하면 이번에는 통과됩니다.


15

<편집>

방금 mod_rewrite.so 대신 mod_rewrite.s라고 말한 것을 알았습니다. httpd.conf 파일이 아닌 질문에 오타가 있기를 바랍니다! :)

</ edit>

Linux에서 Apache를 사용하는 데 더 익숙하지만 다른 날에는이 작업을 수행해야했습니다.

먼저 Apache 설치 디렉토리를 살펴보십시오. (여기서 "C : \ Program Files"에 설치했다고 가정하겠습니다)

"C : \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules"폴더를보고 mod_rewrite.so라는 파일이 있는지 확인하십시오. (기본 설치의 일부로 제공되어야합니다.

다음으로 "C : \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf"를 열고 httpd.conf를 엽니 다. 라인을 확인하십시오 :

#LoadModule rewrite_module modules/mod_rewrite.so

주석 처리되지 않았습니다.

LoadModule rewrite_module modules/mod_rewrite.so

또한 기본적으로 RewriteEngine을 활성화하려면 다음과 같은 것을 추가하십시오.

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

httpd.conf 파일 끝까지

그렇지 않은 경우 지정하십시오

RewriteEngine On

.htaccess 파일의 어딘가에 있습니다.


@gabehabe 아바타가 방금 아이콘을 들고있는 것처럼 보였습니다.
Jonathan dos Santos

5

방금 했어요

sudo a2enmod rewrite

그런 다음 명령에 따라 아파치 서비스를 다시 시작해야합니다

sudo service apache2 restart

4

오래된 스레드, AllowOverride를 모두로 설정하지 않고 사용하려는 특정 모드를 사용하십시오.

AllowOverride mod_rewrite mod_mime

이 줄은 주석 처리를 제거해야합니다

LoadModule rewrite_module modules/mod_rewrite.so

굴절


4

아래 명령 사용

sudo a2enmod rewrite

그리고 아래 명령을 통해 아파치를 다시 시작하십시오.

sudo service apache2 restart

3

분명히 여러 가지 방법이 있지만 더 표준을 사용하는 것이 좋습니다.

ErrorDocument 404 /index.php?page=404

3

처음으로 트래픽을 무시하고 mod_rewrite 규칙으로 고심했을 때, 내가 잘못 <VirtualHost>작성했다는 사실을 알게 되었기 때문에 ( 내가 아무리 잘 작성하더라도 내 트래픽이 모든 규칙을 무시 한다는 것을 의미했습니다 . 이런 일이 일어나지 않도록하십시오 :

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

이 매개 변수는 Apache를 정상적으로 다시 시작하면 활성화되므로 해당 매개 변수를 재활용하고 mod_rewrite 동작을 면밀히 모니터링 할 수 있습니다. 문제가 해결되면 RewriteLogLevel을 다시 낮추고 축하하십시오.

내 경험의 100 %에서 RewriteLog가 다시 쓰기 규칙의 문제를 발견하는 데 도움이되었다는 것을 알게되었습니다. 나는 이것을 충분히 추천 할 수 없다. 문제 해결에 행운을 빕니다!

또한이 책갈피는 가장 친한 친구입니다. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog


2

나를 위해 일한 것 (우분투에서) :

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

또한 이미 언급했듯이 AllowOverride all관련 섹션에 설정되어 있는지 확인하십시오./etc/apache2/sites-available/default

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.