.htaccess, VirtualHost “AllowOverride All” olsa bile yok sayılıyor


25

Fedora 13'te iyi çalışan bir LAMP sunucusu çalıştırıyorum; ancak, şu anki sitemin docroot klasörüne tamamen göz ardı edilen bir ".htaccess" dosyası ekledim.

Bunun da dahil olduğu yarım düzine farklı testi denedim:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Ancak görüntüler ve diğer tüm sayfalar iyi ve hala 404 olmayan dosyaları yükler. Ayrıca şunu denedim:

order deny,allow
deny from all

Ancak her sayfa hala iyi yükler. Yine .htaccess dosyası sadece% 100 göz ardı edilir.

Virtualhost kayıtlarımızı /etc/httpd/conf.d/virtual.conf dosyasına koyarız. Bu gibi görünüyor:

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>

Sunucumuzun .htaccessdosyayı tamamen IGNORE etmesine neden olan başka ne olabilir ?

Düzenle:

Değişikliklerimin göz ardı edildiğini daha iyi göstermek için .htaccess dosyasını yukarıda değiştirdim. Üretim sunucusundaki aynı .htaccess dosyasını tam olarak denediğimi ve iyi çalıştığını unutmayın.

Düzenleme 2:

Tamam, yeni bilgilerim var! Sadece test amaçlı olarak, "HEROVER AllowOverride" yönergesini değiştirdim ve geçici olarak değiştirdim AllowOverride All. İlk Directory girişinin diğerlerinin önüne geçtiğini düşündüm:

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

Bunu değiştirdiğimde AllowOverride All.htaccess dosyalarım etkili olmaya başladı. AllowOverride AllYapılandırma dosyalarımdaki tüm diğer yönergeler yoksayılıyor!

Ne verir?

Yanıtlar:


32

Inanılmaz. Bunun bir geliştirme sunucusu olduğunu söylediğimi hatırlıyor musun? Evet .. işte sanal ana bilgisayar girişim GERÇEKTEN benzeyen şey:

<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>

Görüyor musun? Ben yapmadım. UNUTMAYIN "Dizin" girişimi, ourwebsite.com yerine dev.ourwebsite.com olarak değiştirmek - ve bu tüm farkı yarattı. Dizin olmasaydı Apache'nin bir hata attığını farz ettim; ancak bu yalnızca DocumentRoot yönergesi için geçerlidir. eşleşmeye dayalıdır - yani gelen istekle eşleşirse kuralları uygular, ancak aksi halde sihirli tek boynuzlu atlarda AllowOverride'a söylemenizin bir önemi yoktur.

Bu, gelip başkaları için bir ders olsun - diğerleri başarısız olduğunda, yüce Yazım Hatasını düşünün.


Asla bir milyon yılda bunu yakalayamazdım! Ayrıca Rehber yolunda bir yazım hatası vardı, ayrıca dev bir proje ... Gözlerimi açtığınız için teşekkürler.
gillytech

Ben de dizin kısmında bir yazım hatası vardı. Gerçekten, bu çok sinir bozucuydu. Bunun karşısında gelip süper aptalca hatalar yapabildiğimin farkına vardım.
Akash Kumar Sharma

7 yıl geçtiğini biliyorum, ama ben gelip sadece bu cevabın bana yardım ettiğini söylemek istedim. Aynı şeydi. Yönergeleri farklı bir sanal ana bilgisayardan kopyaladım ve yanlış parçayı değiştirdim. Bu bilgiyi paylaştığınız için teşekkür ederiz! Akıllıca Sörf Yapın.
06'da dolst

5

Virtualhosts bildiriminin yukarısındaki 'httpd.conf' bölümünde verilen başka bir "AllowOverride None" olup olmadığını kontrol edin. Muhtemelen, docroot'ta "AllowOverride None" vardır.


Çalıştığım sunucu bir geliştirme sunucusu ve üretim sunucumuzun tam bir kopyası. Httpd.conf dosyaları pratik olarak aynıdır. SADECE önemli fark, bu sunucudaki "virtual.conf" adresimizin daha az girişe sahip olması ve her sitenin önekinin eklenmiş olmasıdır.dev. . Yine de üretim sunucusu iyi çalışıyor, .htaccess dosyaları tam olarak beklendiği gibi davranıyor ve geliştirme sunucusu .htaccess dosyasını tamamen görmezden geliyor.
Brian Lacy

0

Üç tahmin:

Aslında doğrultusunda virgülden sonra bir boşluk var mı order deny, allowiçinde .htaccess? Apache bundan hoşlanmaz. Benim için F13'te 500'üm vardı.

Bir AccessFileNameyerde bir yönerge var mı?

Selinux kullanıyorsanız, dosya için doğru içeriğe sahip misiniz ( ls -lZ)?


500 hata alamıyorum. .Htaccess dosyası basit bir şekilde yoksayılır. Ve ben zaten orada bir yer olmadığını doğruladım. Selinux veya bağlamlar hakkında hiçbir şey bilmiyorum, ama nasıl kontrol edeceğimi araştırdım ve görünüşe göre Disabled. Gelince AccessFileName, etrafta bakacağız ama Denis' cevabını benim yorumunda söylediği gibi, bu iki sunucular için apache yapılandırma etkin bir aynıdır.
Brian Lacy

Ayrıca mekanla ilgili problemlerim de var. Bu beni deli etti.
egorgry

Hata! Düzeltme: httpd.conf'umda bir AccessFileName yönergesi var. Aşağıdaki gibi okur:AccessFileName .htaccess
Brian Lacy,

0

Bunu yeni bir sunucuda yaptım, sonunda mod-yeniden yazmanın varsayılan olarak etkin olmadığını fark ettim.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.