.htaccess diabaikan meskipun VirtualHost memiliki “AllowOverride All”

25

Saya menjalankan server LAMP di Fedora 13 yang berfungsi dengan baik; namun, saya baru saja menambahkan file ".htaccess" ke folder dokumen situs saya saat ini yang sedang diabaikan sepenuhnya.

Saya sudah mencoba setengah lusin tes yang berbeda, termasuk yang ini:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Tapi gambar dan semua halaman lainnya memuat dengan baik, dan file yang tidak ada masih 404. Saya juga mencoba ini:

order deny,allow
deny from all

Tetapi setiap halaman masih memuat dengan baik. Sekali lagi file .htaccess diabaikan 100%.

Kami menempatkan catatan virtualhost kami di /etc/httpd/conf.d/virtual.conf. Ini terlihat seperti ini:

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>

Apa lagi yang bisa menyebabkan server kami benar-benar MENGABAIKAN .htaccessfile ??

Edit:

Saya mengubah file .htaccess ke atas untuk menunjukkan dengan lebih baik bahwa perubahan saya diabaikan. Perhatikan bahwa saya mencoba file .htaccess yang sama persis di server produksi dan berfungsi dengan baik.

Edit 2:

Oke, saya punya informasi baru! Hanya untuk tujuan pengujian, saya pergi dan mengubah sementara SETIAP arahan "AllowOverride" AllowOverride All. Saya tahu bahwa entri Direktori pertama tampaknya mengalahkan yang lainnya:

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

Ketika saya mengubahnya AllowOverride All, file .htaccess saya mulai berlaku. Ini seperti semua AllowOverride Allarahan lain dalam file konfigurasi saya diabaikan!

Apa yang Memberi ??

Brian Lacy
sumber

Jawaban:

32

Luar biasa. Ingat bagaimana saya mengatakan ini adalah server pengembangan? Ya .. begini tampilannya host virtual saya BENAR-BENAR seperti:

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

Apakah kamu melihatnya? Ya saya tidak. SAYA LUPA Mengubah entri "Direktori" saya ke dev.ourwebsite.com alih-alih ourwebsite.com - dan itu membuat semua perbedaan. Saya hanya berasumsi bahwa Apache akan membuat kesalahan jika direktori tidak ada; tapi itu hanya berlaku untuk direktif DocumentRoot. berbasis pertandingan - artinya berlaku aturan jika cocok dengan permintaan yang masuk, tetapi sebaliknya, tidak peduli jika Anda mengatakannya ke AllowOverride di unicorn ajaib.

Biarkan ini menjadi pelajaran bagi orang lain yang datang mencari - ketika semuanya gagal, pertimbangkan Typo yang maha kuasa.

Brian Lacy
sumber
Saya tidak pernah dalam sejuta tahun akan menangkap ini! Saya juga memiliki salah ketik di jalur Direktori, juga proyek dev ... Terima kasih telah membuka mata saya.
gillytech
Saya juga salah ketik di bagian direktori. Sungguh, ini sangat membuat frustrasi. Itu adalah suatu berkah bahwa saya menemukan ini dan mengetahui fakta bahwa saya dapat membuat kesalahan yang sangat konyol.
Akash Kumar Sharma
Saya tahu ini sudah 7 tahun, tetapi saya hanya ingin mampir dan mengatakan jawaban ini hanya membantu saya. Itu adalah jenis yang sama. Saya telah menyalin arahan dari host virtual yang berbeda dan mengubah bit yang salah. Terima kasih telah berbagi info ini! Berselancar dengan Bijak.
dolst
5

Periksa apakah ada "AllowOverride None" lain yang disajikan dalam 'httpd.conf' di atas deklarasi virtualhosts. Mungkin, Anda memiliki "AllowOverride None" di docroot.

Denis
sumber
Server tempat saya bekerja adalah server pengembangan, dan ini merupakan duplikat yang tepat dari server produksi kami. File httpd.conf secara praktis identik. Perbedaan HANYA yang signifikan adalah "virtual.conf" kami di server ini memiliki lebih sedikit entri dan setiap situs diawali dengan dev.. Namun server produksi berfungsi dengan baik, file .htaccess berperilaku tepat seperti yang diharapkan, dan server pengembangan hanya mengabaikan file .htaccess sama sekali.
Brian Lacy
0

Tiga tebakan:

Sebenarnya ada spasi setelah koma di baris order deny, allowdi .htaccess? Apache tidak suka itu. Bagi saya di F13 saya mendapat 500-an.

Apakah Anda memiliki AccessFileNamearahan di mana saja?

Jika Anda menggunakan selinux, apakah Anda memiliki konteks yang benar untuk file ( ls -lZ)?

Mark Wagner
sumber
Saya tidak mendapatkan 500 kesalahan. File .htaccess diabaikan begitu saja. Dan saya memverifikasi bahwa saya tidak punya ruang di sana. Saya tidak tahu apa-apa tentang selinux atau konteks, tetapi saya mencari cara memeriksa dan ternyata itu Dinonaktifkan. Adapun AccessFileName, saya akan melihat-lihat, tetapi seperti yang saya katakan dalam komentar saya pada jawaban Denis, konfigurasi apache untuk kedua server ini secara efektif identik.
Brian Lacy
Saya juga punya masalah dengan ruang. Itu membuatku gila.
egorgry
Whoops, koreksi: Saya punya arahan AccessFileName di httpd.conf saya. Bunyinya sebagai berikut:AccessFileName .htaccess
Brian Lacy
0

Saya punya ini di server baru, akhirnya menyadari bahwa mod-rewrite tidak diaktifkan secara default.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
selamat tinggal
sumber