아파치가 작동하지 않습니다.


135

Linux 우분투에서 실행되는 AWS EC2 서비스의 서버가 있고 아파치, PHP 및 mysql을 설치했습니다.

.htaccess내 문서 루트에 파일을 추가했습니다 /var/www/html.

이 코드를 입력했는데 ErrorDocument 404 /var/www/html/404.php여전히 표시되지 않습니다.

sudo service httpd restart서버를 다시 시작하지만 변경 사항이 표시되지 않도록 이 명령을 여러 번 입력했습니다 ...

이 문제를 어떻게 해결할 수 있습니까? 내가 뭔가 잘못 했습니까?

미리 감사드립니다!


2
400 Bad Request오류를 에 매핑 /var/www/html/404.php하시겠습니까?
Jon Lin

답변:


288

먼저 .htaccess 파일에는 httpd를 다시 시작할 필요가 없습니다. .htaccess 파일은 루트가없는 사람, 즉 httpd 서버 구성 파일에 액세스 할 수없고 서버를 다시 시작할 수없는 사용자를위한 것입니다. 서버를 다시 시작할 수 있으므로 .htaccess 파일이 필요하지 않으며 주 서버 구성을 직접 사용할 수 있습니다.

둘째, .htaccess 파일이 무시되는 경우 AllowOverride가 올바르게 설정되어 있는지 확인해야합니다. 자세한 내용은 http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride 를 참조하십시오. 또한 올바른 범위, 즉 구성의 오른쪽 블록에 설정되어 있는지 확인해야합니다. 당신이있어 확인 하지 예를 들어, 블록의 하나를 편집.

셋째, .htaccess 파일을 실제로 읽으려면 쓰레기를 넣으십시오. .htaccess 파일에서 "INVALID LINE HERE"와 같은 잘못된 행은 브라우저가 해당 파일이 포함 된 디렉토리를 가리킬 때 500 서버 오류를 발생시킵니다. 그렇지 않은 경우 AllowOverride가 올바르게 구성되지 않은 것입니다.


141
진단 도구로 .htaccess 파일에 가비지를 넣는 경우 +1
retrohacker

46
프로그래밍의 쓰레기는 소리보다 더 유용합니다.
EnKrypt

1
나는 퍼트 "A STRING" 나는 오류가 발생 것, 그래서 내가 퍼트 그래서, 내 htaccess로에서 AllowOverride All모두 apache2.conf내 데비안와 그것을 작동합니다
알렉스

1
AllowOverride에서만 작동 <Directory>지침과 내부에 위치하는 경우 무시됩니다 <Location ...>섹션을 참조하십시오 httpd.apache.org/docs/2.4/mod/core.html#allowoverride
다니엘 Sokolowski

2
또한 <Directory>지시문은 상대 경로 대신 절대 경로를 기대합니다. 내 경우에는 일하는 동안 <Directory /> 실패<Directory /var/www/html/subdir> 했습니다.
Lukas Knuth

115
  1. Apache mod_rewrite 모듈 활성화

    a2enmod rewrite

  2. 다음 코드를 추가하십시오 /etc/apache2/sites-available/default

    AllowOverride All

  3. 아파치 다시 시작

    /etc/init.d/apache2 restart


7
Apache 2.4에서는 / etc / apache2 / sites-available 아래의 구성 파일이 .conf로 끝나야합니다. 그리고 난에 default.conf 내 서버에 약간의 호환 문제가 있었다 / 등 / 아파치 / 가능한 사이트 및에 / 등 / 아파치 / 한
rubo77

2
고마워, 내 경우에는 apache2에서 기본적으로 다시 쓰기가 활성화되지 않았습니다.
Cross

나는 이미이 단계를 수행하지만 그것은 아파치 2.4에서 작동하지 않습니다 내가 잘못하고있는 일 = [
Luciano Andress Martini

ip 재정의 요구에 인증이 필요한 것처럼 보이며,이 동작은 예기치 않습니다 (아파치 2.2의 특정 ip에서 허용하지 않음) .IP 예외가 인증을 모방하기 때문에 아파치 2.2에서는 완전히 다른 것입니다. !
Luciano Andress Martini

첫 번째 단계는 생략했지만 apache.conf (Debian 8, /etc/apache2/apache.conf)에서 AllowOverride를 All로 변경하고 다시 시작했으며 파일에 액세스 할 수 없습니다. 그러나 오류는 권한 거부와 같지 않지만 500 내부 서버 오류입니다. 왜 그렇습니까? 고칠 수 있습니까?
dasLort

44

위의 모든 것을 시도했지만 모두 유효하고 좋은 대답이며 htaccess 파일이 작동하지 않거나 읽지 않는 경우 apache2.conf파일 의 지시문을 변경 하십시오. 우분투에서 경로는/etc/apache2/apache2.conf

<Directory>htaccess 파일이있는 공용 웹 페이지를 가리키는 지시문을 변경하십시오 . 에서 AllowOverride None로 변경AllowOverride All

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

나는 같은 문제가 있었고 Ubuntu Ask에서 답과 설명을 찾았습니다! 포럼 /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
또는 VHost
ssi-anik

실제로 파일을 읽고 사용하려면 AllowOverride FileInfo세 번째 줄 에만 필요합니다 .htaccess. All또한 .httpasswd( Authconfig대신 에 사용하여 개별적으로 활성화 할 수있는) 와 같은 추가 구성 재정의를 활성화 All합니다.
Rafal

20

를 들어 우분투,
첫째,이 명령을 실행합니다 -

sudo a2enmod rewrite

그런 다음 /etc/apache2/sites-available/000-default.conf이 명령을 사용하여 nano 또는 vim을 사용하여 파일 을 편집하십시오 .

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

그런 다음 000-default.conf파일에서 줄 뒤에 이것을 추가하십시오 DocumentRoot /var/www/html. 루트 html 디렉토리가 다른 경우 다음과 같이 작성하십시오.

<Directory "/var/www/html">
  AllowOverride All
</Directory>

모든 작업을 수행 한 후 명령을 사용하여 아파치를 다시 시작하십시오. sudo service apache2 restart


6

3 단계 만 수행하면됩니다.

  1. 다음 명령을 사용하여 mode_rewrite 활성화

    sudo a2enmod 다시 쓰기

비밀번호를 묻습니다. 비밀번호를 입력하세요

  1. / etc / apache2 / sites-available / 디렉토리 에있는 000-default.conf 또는 default.conf 파일을 업데이트하십시오 . 직접 편집 할 수 없습니다. 따라서 다음 명령을 사용하여 엽니 다.

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

또는 sudo gedit /etc/apache2/sites-available/default.conf

당신은 얻을 것이다

DocumentRoot / var / www / html

또는

DocumentRoot / var / www

선. 그 뒤에 다음 코드를 추가하십시오.

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

사용자에게 디렉토리 태그 경로를 파일에 표시된 것과 동일하게 만드십시오.

  1. 다음 명령을 사용하여 아파치 서버를 다시 시작하십시오.

    sudo 서비스 아파치 2 재시작


감사. 브라질에서의 인사.
Fox.11

5

대부분 AllowOverride가 None으로 설정되어 있습니다. / etc / apache2 폴더에있는 apache2.conf의 디렉토리 섹션

AllowOverride All로 설정하십시오.


5

내 경험상 / var / www / 디렉토리 지시문은 하위 폴더 가상 호스트 지시문을 방지합니다. 따라서 모든 제안을 시도했지만 여전히 작동하지 않고 가상 호스트를 사용중인 경우이를 시도하십시오.

1- AllowOverride All지시어가 있는지 확인하십시오 /etc/apache2/sites-available/example.com.conf

2-164 행에있는 / var / www / 디렉토리 지시문을 확인하십시오 /etc/apache2/apache2.conf.

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

AllowOverride None지시어 가 있으면 변경 AllowOverride All 하거나 이스케이프 라인으로 변경하십시오.


3

기본적으로 Apache는 .htaccess 파일을 사용하여 다시 쓰기 규칙을 적용하는 것을 금지하므로

1 단계 — mod_rewrite 활성화 (활성화되지 않은 경우) 먼저 mod_rewrite를 활성화해야합니다. 새로 설치 한 Apache 2 설치에서는 사용할 수 있지만 사용할 수 없습니다.

$ sudo a2enmod rewrite

이렇게하면 모듈이 활성화되거나 모듈이 이미 활성화되었음을 알립니다. 이러한 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

$ sudo systemctl restart apache2

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

2 단계 — .htaccess 설정 nano 또는 자주 사용하는 텍스트 편집기를 사용하여 기본 Apache 구성 파일을 엽니 다.

$ sudo nano /etc/apache2/sites-available/000-default.conf

해당 파일 안에 첫 번째 줄부터 시작하는 블록이 있습니다. 해당 블록 안에 구성 파일이 다음과 같이 보이도록 다음 새 블록을 추가하십시오. 모든 블록이 올바르게 들여 쓰기되어 있는지 확인하십시오.

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

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

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

$ sudo systemctl restart apache2

끝난. .htacess가 작동해야합니다. 이 링크는 실제로 누군가를 도울 수 있습니다 https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04


나를 위해 일한 재시작 명령은 $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg

3

나는 이것을 사용하지 않았다. 이 사이트를 사용하여 여기를 클릭 하고 단계를 따르십시오. 동일한 단계가 우분투 버전 18.04까지 이어집니다.


1

에서 WampServer열기 WampServer 트레이 아이콘 ----> 아파치 ---> 아파치 모듈 ---> rewrite_module



0

완전성을 위해 "AllowOverride All"로 문제가 해결되지 않으면 다음을 사용하여이 문제를 디버깅 할 수 있습니다.

  1. apachectl -S하나 이상의 namevhost가 있는지 확인하고 실행 하십시오. httpd가 다른 DocumentRoot의 .htaccess를 찾고있을 수 있습니다.

  2. strace -f apachectl -X.htaccess가로드되는 위치 (또는로드되지 않는)를 사용 하고 찾으십시오.

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