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.