Apakah ini cara yang benar untuk mengaktifkan htaccess di Apache 2.4.7


46

Di hampir setiap solusi "Cara mengaktifkan htaccess", mereka mengatakan bahwa file / etc / apache2 / sites-available / default perlu diedit. Tetapi tidak ada file seperti itu di Apache 2.4.7

Saya membaca di suatu tempat bahwa file default baru adalah 000-default.conf. Jadi saya mengedit yang itu dan mencoba menambahkan baris:

AllowOverride All

Tetapi Apache2 tidak restart dengan benar dan memberikan kesalahan. Dari dokumentasi apache2, saya menemukan bahwa AllowOverride hanya diperbolehkan di bawah <Directory>bagian ini. Lalu saya mencoba menambahkan ini:

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

Dan ini sepertinya berhasil. Tapi saya tidak yakin apakah saya harus meletakkan / var / www di sana. Apakah ini cara yang benar atau apakah komputer saya akan meledak?


Lihat ini. Mungkin membantu Anda. stackoverflow.com/questions/33062142/…
Avnish alok

Jawaban:


58

tl; dr

Ya itu cara yang benar.
Tetapi untuk menjadi lebih semantik : Ya, ini adalah cara yang benar untuk memungkinkan .htaccessuntuk mengesampingkan semua arahan dalam /var/wwwdirektori.


Seperti yang Anda ketahui, AllowOverridehanya diperbolehkan di bawah Directorybagian ini.

Menggunakan contoh Anda:

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

Ini memberi tahu apache, bahwa semua konfigurasi dapat ditimpa dalam /var/wwwdan semua sub-direktori (secara rekursif).


Untuk contoh yang lebih baik, pertimbangkan Anda memiliki konfigurasi berikut di host virtual Anda:

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

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

Dan struktur direktori berikut:

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

Apa yang saya lakukan di sini, adalah membuat .htaccessdi setiap sub-direktori /var/wwwdirektori.
Seharusnya tidak seperti itu, tetapi ini hanya untuk contoh saja

Membandingkan struktur direktori dengan konfigurasi, itu berarti bahwa semua .htaccessfile di dalam /var/wwwfolder dan sub-direktori, tidak termasuk /var/www/uploadsdirektori dan sub-direktori, dapat menimpa semua jenis arahan.

Tetapi /var/www/uploadsdan sub-direktori hanya dapat menggunakan .htaccessfile untuk menimpa Allow, Denydan Orderarahan.

Catatan: Pada apache 2.4 (Yang tersedia secara default di 13.10+) Allow, Denydan Orderarahan digantikan oleh arahan tunggal bernama Require.


39

Pertama, aktifkan penulisan ulang menggunakan perintah ini:

sudo a2enmod rewrite

Kemudian restart apache2:

sudo service apache2 restart

Lalu masuk ke sites-availablefolder:

/etc/apache2/sites-available

Edit file bernama defaultdan ubah AllowOverride noneke AllowOverride All. Ada dua baris di mana perubahan ini harus dilakukan.

Ini akan .htaccessberfungsi di VPS server Anda.

Ini bekerja pada VPS Ubuntu 12.04.5.


3
tidak ada file bernama default - tetapi ada file bernama 000-default.conf
Tahir Yasin

1
+1 untuk mengingatkan untuk mengaktifkan penulisan ulang, saya melewatkan ini dan tidak tahu mengapa itu tidak berfungsi setelah melakukan semua hal.
Abdul Mannan

Komentar ini merujuk pada konfigurasi Apache 2.2, bukan 2.4. Pada 2.4, defaultfile dipanggil 000-default.conf, dan tidak mengandung AllowOverride Nonebaris.
ben_nuttall

file tersebut 000-default.confdan tidak mungkin untuk menambahkan di AllowOverride Nonesini, jika Anda memuat ulang apache memberikan kesalahan
Kreker

Jika semua yang Anda butuhkan adalah mengizinkan arahan mod_rewrite untuk diganti .htaccess, lebih baik digunakan AllowOverride FileInfo. Meskipun FileInfo sudah menyertakan sejumlah besar arahan, Anda masih akan membatasi banyak arahan agar tidak ditimpa.
Dan

3

Dalam kasus saya, ini berfungsi seperti ini:
Saya harus menambahkan baris berikut:

Order allow, deny
Allow from all

Jadi sepertinya ini:

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

Meskipun ini mungkin telah memperbaiki masalah Anda, itu tidak terkait dengan pertanyaan OP. Perintah dan izinkan arahan adalah arahan di apache2.2 dan sebelumnya. Mereka digunakan untuk mengizinkan / menolak akses ke pengguna pada direktori tertentu. Mereka tidak memiliki dampak pada apakah arahan dalam file .htaccess akan diuraikan atau tidak.
Dan

2

Di sini cuplikan cara mengaktifkan htaccess di Apache 2.4 tanpa mengubah konfigurasi default:

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

a2enconf allow-override
service apache2 reload
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.