VirtualHost에 "AllowOverride All"이 있어도 .htaccess가 무시됩니다.


25

Fedora 13에서 LAMP 서버를 실행 중입니다. 그러나 방금 현재 사이트의 docroot 폴더에 ".htaccess"파일을 추가하여 완전히 무시했습니다.

이 테스트를 포함하여 6 가지 다른 테스트를 시도했습니다.

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

그러나 이미지와 다른 모든 페이지는 정상적으로로드되고 존재하지 않는 파일은 여전히 ​​404를로드합니다.

order deny,allow
deny from all

그러나 모든 페이지는 여전히 정상적으로로드됩니다. .htaccess 파일은 100 % 무시됩니다.

가상 호스트 레코드를 /etc/httpd/conf.d/virtual.conf에 넣습니다. 다음과 같이 보입니다 :

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

서버가 .htaccess파일 을 완전히 무시하게 만드는 원인은 무엇입니까 ??

편집하다:

변경 사항이 무시되고 있음을 더 잘 보여주기 위해 .htaccess 파일을 위의 항목으로 변경했습니다. 프로덕션 서버에서 똑같은 .htaccess 파일을 시도했지만 정상적으로 작동했습니다.

편집 2 :

네, 새로운 정보가 있습니다! 테스트 목적으로 모든 "AllowOverride"지시문을으로 일시적으로 변경했습니다 AllowOverride All. 첫 번째 디렉토리 항목이 다른 모든 항목을 압도하는 것으로 나타났습니다.

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

로 변경하면 AllowOverride All.htaccess 파일이 적용되기 시작합니다. AllowOverride All구성 파일 의 다른 모든 지시문이 무시되는 것과 같습니다 !

무엇을 주는가 ??

답변:


32

믿을 수 없는. 이것이 개발 서버라고 말한 것을 기억하십니까? 예 .. 가상 호스트 항목이 실제로 다음과 같습니다.

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

당신은 그것을 봅니까? 글쎄요. 잊어 버렸습니다. "디렉토리"항목을 ourwebsite.com 대신 dev.ourwebsite.com으로 변경하면 큰 차이가 있습니다. 디렉토리가 존재하지 않으면 Apache에서 오류가 발생했다고 가정했습니다. 그러나 이는 DocumentRoot 지시문에만 적용됩니다. 일치 기반-들어오는 요청과 일치하는 경우 규칙을 적용하지만, 그렇지 않으면 매직 유니콘에서 AllowOverride에 알려주더라도 상관 없습니다.

다른 사람들에게도 교훈이 되십시오. 다른 모든 것이 실패하면 전능 한 오타를 고려하십시오.


나는 백만 년 안에 이것을 결코 잡지 못했을 것입니다! 나는 또한 디렉토리 경로, 개발 프로젝트에 오타가있었습니다 ... 눈을 열어 주셔서 감사합니다.
— gillytech

나는 또한 디렉토리 부분에 오타가있었습니다. 실제로 이것은 매우 실망 스러웠습니다. 내가 이것을 맞아서 내가 바보 같은 실수를 할 수 있다는 사실을 알게 된 것은 축복이었다.
— Akash Kumar Sharma

나는 그것이 7 년이라는 것을 알고 있지만 방금 들어 와서이 답변이 도움이되었다고 말하고 싶었습니다. 그것은 같은 유형이었습니다. 다른 가상 호스트에서 지시문을 복사하고 잘못된 비트를 변경했습니다. 이 정보를 공유해 주셔서 감사합니다! 현명하게 서핑하십시오.
— dolst

5

virtualhosts 선언 위의 'httpd.conf'에 다른 "AllowOverride None"이 있는지 확인하십시오. docroot에 "AllowOverride None"이있을 수 있습니다.


내가 작업하는 서버는 개발 서버이며 프로덕션 서버와 완전히 동일합니다. httpd.conf 파일은 실제로 동일합니다. 유일한 차이점은이 서버의 "virtual.conf"에 항목 수가 적고 각 사이트 앞에 접두사가 붙는다는 것입니다 dev.. 그러나 프로덕션 서버는 제대로 작동하고 .htaccess 파일은 예상대로 정확하게 작동하며 개발 서버는 단순히 .htaccess 파일을 무시합니다.
— 브라이언 레이스

0

세 가지 추측 :

실제로 쉼표 뒤에 공백 order deny, allow이 .htaccess있습니까? 아파치는 그것을 좋아하지 않습니다. F13에서 저에게 500을 받았습니다.

당신은 가지고 있습니까 AccessFileName지시 어디를?

selinux를 사용하는 경우 파일 ( ls -lZ)에 대한 올바른 컨텍스트가 있습니까?


500 오류가 발생하지 않습니다. .htaccess 파일은 단순히 무시됩니다. 그리고 나는 거기에 공간이 없다는 것을 확인했습니다. selinux 또는 컨텍스트에 대해서는 아무것도 모르지만 확인하는 방법을 찾았으며 분명히 Disabled입니다. 에 관해서 AccessFileName는 둘러 볼 것이지만 Denis의 답변에 대한 의견에서 언급 했듯이이 두 서버의 아파치 구성은 사실상 동일합니다.
— Brian Lacy

나는 또한 공간에 문제가 있었다. 그것은 나를 미치게했다.
— egorgry

맞아, 수정 : 내 httpd.conf에 AccessFileName 지시문이 있습니다. AccessFileName .htaccess
— Brian Lacy

0

나는 이것을 새로운 서버에서 가지고 있었고 결국 mod-rewrite가 기본적으로 활성화되어 있지 않다는 것을 깨달았다.

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