.htaccess tidak berfungsi apache


139

Saya memiliki server dari layanan AWS EC2 yang berjalan di Linux ubuntu dan saya telah menginstal apache, php, dan mysql.

Saya telah menambahkan .htaccessfile di root dokumen saya /var/www/html.

Saya memasukkan kode ini di dalamnya: ErrorDocument 404 /var/www/html/404.phpdan masih belum muncul.

Saya terus memasukkan perintah ini beberapa kali: sudo service httpd restartuntuk memulai ulang server tetapi tidak ada perubahan yang ditampilkan ...

Bagaimana cara memperbaikinya ... Apakah saya melakukan sesuatu yang salah?

Terima kasih sebelumnya!


2
Anda yakin ingin memetakan 400 Bad Requestkesalahan ke /var/www/html/404.php?
Jon Lin

Jawaban:


291

Pertama, perhatikan bahwa memulai ulang httpd tidak diperlukan untuk file .htaccess. File .htaccess khusus untuk orang yang tidak memiliki root - yaitu, tidak memiliki akses ke file konfigurasi server httpd, dan tidak dapat memulai ulang server. Karena Anda dapat memulai ulang server, Anda tidak memerlukan file .htaccess dan dapat menggunakan konfigurasi server utama secara langsung.

Kedua, jika file .htaccess diabaikan, Anda perlu memeriksa untuk melihat bahwa AllowOverride disetel dengan benar. Lihat http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride untuk detailnya. Anda juga perlu memastikan bahwa ini diatur dalam cakupan yang benar - yaitu, di blok kanan dalam konfigurasi Anda. Pastikan Anda TIDAK mengedit yang di blok, misalnya.

Ketiga, jika Anda ingin memastikan bahwa file .htaccess benar-benar dibaca, masukkan sampah ke dalamnya. Baris yang tidak valid, seperti "INVALID LINE HERE", dalam file .htaccess Anda, akan menyebabkan 500 Server Error saat Anda mengarahkan browser ke direktori yang berisi file tersebut. Jika tidak, Anda tidak memiliki AllowOverride dikonfigurasi dengan benar.


146
1 untuk meletakkan sampah di file .htaccess sebagai alat diagnostik.
retrohacker

47
Sampah dalam pemrograman lebih berguna daripada kedengarannya.
EnKrypt

1
Saya memasukkan "A STRING" .htaccess saya, jadi saya menerima kesalahan, jadi saya memasukkan AllowOverride Allsemua ke apache2.confDebian saya dan berhasil
Alex

1
Perhatikan bahwa AllowOverridehanya berfungsi dalam <Directory>arahan dan akan diabaikan jika ditempatkan di dalam <Location ...>bagian, lihat: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski

2
Perhatikan juga bahwa <Directory>direktif mengharapkan jalur absolut, bukan relatif. Dalam kasus saya, <Directory /> gagal saat <Directory /var/www/html/subdir>bekerja.
Lukas Knuth

117
  1. Aktifkan modul Apache mod_rewrite

    a2enmod rewrite

  2. tambahkan kode berikut ke /etc/apache2/sites-available/default

    AllowOverride All

  3. Mulai ulang apache

    /etc/init.d/apache2 restart


7
perhatikan bahwa di Apache 2.4, file konfigurasi di bawah / etc / apache2 / sites-available harus diakhiri dengan .conf sekarang. Dan saya memiliki beberapa kesalahan di server saya dengan default.conf di / etc / apache2 / sites-available dan satu di / etc / apache2 /
rubo77

2
Terima kasih, dalam kasus saya penulisan ulang tidak diaktifkan secara default di apache2
Silang

saya sudah mengikuti langkah-langkah ini tetapi tidak berfungsi di apache 2.4 apa yang saya lakukan salah = [
Luciano Andress Martini

Sepertinya memerlukan penggantian ip memerlukan otentikasi, perilaku ini tidak terduga (izinkan dari ip tertentu di apache 2.2 jangan lakukan ini) dan menurut saya bisa sangat berbahaya, karena pengecualian ip menganulasi otentikasi, di apache 2.2 mereka adalah hal yang sama sekali berbeda !
Luciano Andress Martini

Saya menghilangkan langkah pertama tetapi mengubah AllowOverride ke All di apache.conf saya (Debian 8, /etc/apache2/apache.conf), memulai ulang dan file tidak dapat diakses, bagus. Tapi errornya bukan seperti permission yang ditolak melainkan 500 Internal Server Error, kenapa bisa begitu? Bisakah saya memperbaikinya?
dasLort

48

Jika Anda telah mencoba semua cara di atas, yang semuanya merupakan jawaban yang valid dan bagus, dan file htaccess Anda tidak berfungsi atau sedang dibaca ubah petunjuk di apache2.conffile tersebut. Di bawah Ubuntu jalurnya adalah/etc/apache2/apache2.conf

Ubah <Directory>petunjuk yang mengarah ke halaman web publik Anda, tempat file htaccess berada. Ubah dari AllowOverride NonemenjadiAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Saya memiliki masalah yang sama dan menemukan jawaban dan penjelasannya di Ubuntu Ask! forum /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
Atau, dapat ditambahkan di VHost
ssi-anik

Sebenarnya, hanya AllowOverride FileInfodiperlukan di baris ke-3 agar .htaccessfile dapat dibaca dan digunakan. Alljuga mengaktifkan penggantian konfigurasi tambahan, seperti .httpasswd(yang dapat diaktifkan secara individual dengan menggunakan Authconfigalih-alih All).
Rafal

20

Untuk Ubuntu,
Pertama, jalankan perintah ini: -

sudo a2enmod rewrite

Kemudian, edit file /etc/apache2/sites-available/000-default.confmenggunakan nano atau vim menggunakan perintah ini: -

sudo nano /etc/apache2/sites-available/000-default.conf

Kemudian di 000-default.conffile, tambahkan ini setelah baris DocumentRoot /var/www/html. Jika direktori root html Anda adalah yang lain, tulislah: -

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

Setelah melakukan semuanya, restart apache menggunakan perintah sudo service apache2 restart


7

Ikuti saja 3 langkah

  1. Aktifkan mode_rewrite menggunakan perintah berikut

    sudo a2enmod menulis ulang

Kata sandi akan ditanyakan. Jadi masukkan kata sandi Anda

  1. Perbarui file 000-default.conf atau default.conf Anda yang terletak di direktori / etc / apache2 / sites-available / . Anda tidak dapat mengeditnya secara langsung. jadi gunakan perintah berikut untuk membuka

    sudo gedit /etc/apache2/sites-available/000-default.conf

Atau sudo gedit /etc/apache2/sites-available/default.conf

kamu akan mendapatkan

DocumentRoot / var / www / html

ATAU

DocumentRoot / var / www

garis. Tambahkan kode berikut setelahnya.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Jadikan pengguna jalur tag direktori sama seperti yang ditunjukkan di file Anda.

  1. Mulai ulang server apache Anda menggunakan perintah berikut

    sudo service apache2 restart


Terima kasih. Salam dari Brazil.
Fox.

6

Dalam pengalaman saya, / var / www / direktori direktif mencegah direktif virtualhost subfolder. Jadi jika Anda telah mencoba semua saran dan masih tidak berfungsi dan Anda menggunakan virtualhost, coba ini;

1 - Pastikan Anda memiliki AllowOverride Allarahan /etc/apache2/sites-available/example.com.conf

2 - Periksa / var / www / Direktori di /etc/apache2/apache2.conf(mungkin di baris 164), yang terlihat seperti;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Jika ada AllowOverride Nonearahan ubah menjadi AllowOverride All atau escape line saja


5

Kemungkinan besar, AllowOverride disetel ke None. di bagian Direktori apache2.conf yang terletak di folder / etc / apache2

Coba atur ke AllowOverride All


4

Secara default, Apache melarang penggunaan file .htaccess untuk menerapkan aturan penulisan ulang, jadi

Langkah 1 - Mengaktifkan mod_rewrite (jika tidak Diaktifkan) Pertama, kita perlu mengaktifkan mod_rewrite. Ini tersedia tetapi tidak diaktifkan dengan instalasi Apache 2 yang bersih.

$ sudo a2enmod rewrite

Ini akan mengaktifkan modul atau mengingatkan Anda bahwa modul tersebut sudah diaktifkan. Untuk menerapkan perubahan ini, mulai ulang Apache.

$ sudo systemctl restart apache2

mod_rewrite sekarang sepenuhnya diaktifkan. Pada langkah selanjutnya kita akan menyiapkan file .htaccess yang akan kita gunakan untuk mendefinisikan aturan penulisan ulang untuk pengalihan.

Langkah 2 - Menyiapkan .htaccess Buka file konfigurasi Apache default menggunakan nano atau editor teks favorit Anda.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Di dalam file itu, Anda akan menemukan blok yang dimulai dari baris pertama. Di dalam blok itu, tambahkan blok baru berikut sehingga file konfigurasi Anda terlihat seperti berikut. Pastikan semua blok diindentasi dengan benar.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Simpan dan tutup file. Untuk menerapkan perubahan ini, mulai ulang Apache.

$ sudo systemctl restart apache2

Selesai. .Htacess Anda harus berfungsi. Tautan ini sebenarnya dapat membantu seseorang https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04


Perintah restart yang berhasil untuk saya adalah $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg

2

Saya menghapus penggunaan ini. Dengan menggunakan situs ini klik Di Sini , ikuti langkah-langkahnya, langkah-langkah yang sama mengikuti hingga ubuntu versi 18.04


1

Di WampServerikon Open WampServer Tray ----> Apache ---> Apache Modules ---> rewrite_module



0

Untuk kelengkapan, jika "AllowOverride All" tidak memperbaiki masalah Anda, Anda dapat men-debug masalah ini menggunakan:

  1. Jalankan apachectl -Sdan lihat apakah Anda memiliki lebih dari satu namevhost. Mungkin httpd sedang mencari .htaccess dari DocumentRoot lain.

  2. Gunakan strace -f apachectl -Xdan cari dari mana asalnya memuat (atau tidak memuat) .htaccess.


0

Buka /etc/apache2/apache2.conf

Anda harus mengedit file itu (Anda harus memiliki izin root). Ubah teks direktori seperti di bawah ini:

<Directory / var / www />
Opsi Indeks FollowSymLinks
AllowOverride All
Wajibkan semua diberikan

Sekarang Anda harus memulai ulang apache.

layanan apache2 restart

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.