이것은 Apache 2.4.7에서 htaccess를 활성화하는 올바른 방법입니까?


46

"htaccess를 활성화하는 방법"의 거의 모든 솔루션에서 / etc / apache2 / sites-available / default 파일을 편집해야한다고 말합니다. 그러나 Apache 2.4.7에는 그러한 파일이 없습니다.

새 기본 파일이 000-default.conf라는 곳을 읽었습니다. 그래서 그 것을 편집하고 줄을 추가하려고했습니다.

AllowOverride All

그러나 Apache2가 올바르게 다시 시작되지 않아 오류가 발생했습니다. apache2 문서에서 AllowOverride가 <Directory>섹션 에서만 허용된다는 것을 알았습니다 . 그런 다음 이것을 추가하려고했습니다.

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

그리고 이것은 효과가있는 것 같습니다. 그러나 / var / www를 거기에 넣었는지 확실하지 않습니다. 올바른 방법입니까, 아니면 어떻게 든 컴퓨터가 고장 날까요?


이것 좀 봐. 도움이 될 수 있습니다. stackoverflow.com/questions/33062142/…
Alok avin

답변:


58

tl; dr

네 맞습니다.
그러나 더 의미 론적으로 : 예, 디렉토리의 .htaccess모든 지시문을 무시할 수있는 올바른 방법 /var/www입니다.


알다시피 섹션 AllowOverride아래에서만 허용됩니다 Directory.

귀하의 예를 사용하여 :

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

이것은 아파치에게 모든 구성이 모든 /var/www하위 디렉토리에서 재귀 적 으로 재정의 될 수 있음을 말해줍니다 .


더 나은 예를 위해 가상 호스트에 다음 구성이 있다고 가정하십시오.

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

그리고 다음 디렉토리 구조 :

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

내가 한 것은 .htaccess디렉토리의 모든 하위 디렉토리에 디렉토리를 만드는 것 입니다 /var/www.
일반적으로 그렇게해서는 안되지만 이것은 예제를위한 것입니다.

디렉토리 구조와 구성을 비교하면 디렉토리 및 해당 서브 디렉토리를 제외한 폴더 및 서브 디렉토리 .htaccess의 모든 파일이 모든 유형의 지시문을 대체 할 수 있습니다./var/www/var/www/uploads

그러나 /var/www/uploads해당 서브 디렉토리는 .htaccess파일을 사용 하여 Allow, DenyOrder지시문 을 대체 할 수 있습니다 .

참고 :이 (13.10+에서 기본적으로 사용할 수있는) 아파치 2.4의로서 Allow, DenyOrder지시의 이름은 하나의 지침으로 대체되었다 Require.


39

먼저이 명령을 사용하여 다시 쓰기를 활성화하십시오.

sudo a2enmod rewrite

그런 다음 apache2를 다시 시작하십시오.

sudo service apache2 restart

그런 다음 sites-available폴더 로 이동하십시오 .

/etc/apache2/sites-available

이름이 지정된 파일을 편집 default하고로 변경 AllowOverride none하십시오 AllowOverride All. 이 변경이 필요한 두 줄이 있습니다.

이것은 .htaccess서버 VPS에서 작동합니다.

이것은 Ubuntu 12.04.5 VPS에서 작동했습니다.


3
기본적라는 이름의 파일이 없습니다 -하지만라는 이름의 파일 000-default.conf이있다
타히르 야신

1
재 작성을 상기시켜주는 +1, 나는 이것을 놓치고 모든 일을 한 후에 왜 작동하지 않는지 알 수 없었습니다.
Abdul Mannan

이 주석은 2.4가 아닌 Apache 2.2의 구성을 나타냅니다. 2.4에서는 default파일이이며 행이 000-default.conf포함되어 있지 않습니다 AllowOverride None.
ben_nuttall

파일은 000-default.conf그것을 추가 할 수 없습니다 AllowOverride None당신이 아파치주고 오류 다시로드하면, 여기
Kreker

mod_rewrite 지시문을 재정의 .htaccess하는 것이 필요한 경우 사용하는 것이 좋습니다 AllowOverride FileInfo. FileInfo에는 이미 많은 지시문이 포함되어 있지만 여전히 많은 지시문이 재정의되는 것을 제한하고 있습니다.
Dan

3

필자의 경우
다음과 같이 작동했습니다 . 다음 줄을 추가해야했습니다.

Order allow, deny
Allow from all

따라서 다음과 같습니다.

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

문제가 해결되었지만 OP의 질문과는 관련이 없습니다. order 및 allow 지시문은 apache2.2 및 이전 버전의 지시문입니다. 특정 디렉토리의 사용자에 대한 액세스를 허용 / 거부하는 데 사용됩니다. .htaccess 파일의 지시문이 구문 분석되는지 여부에 영향을 미치지 않습니다.
Dan

2

다음은 기본 구성을 변경하지 않고 Apache 2.4에서 htaccess를 활성화하는 방법입니다.

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

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