Mengapa mengaktifkan penulisan ulang login .htaccess tidak berfungsi?

9

Saya ingin mengaktifkan penulisan ulang logging sehingga saya bisa men-debug aturan penulisan ulang tetapi menambahkan arahan RewriteLog menyebabkan 500 kesalahan.

Informasi versi:

Ubuntu 14.04

Server version: Apache/2.4.12 (Ubuntu)
Server built:   Feb  4 2015 14:22:06

Isi dari .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5

RewriteBase /

RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Dalam log kesalahan saya melihat:

/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
codecowboy
sumber

Jawaban:

14

Selain lupa bahwa penebangan tidak dapat dikonfigurasi dalam .htaccessfile, ini juga ternyata merupakan masalah versi Apache. Arahan RewriteLog telah diganti dalam versi yang lebih baru dan menambahkan berikut ini ke konfigurasi Virtualhost memungkinkan log penulisan ulang untuk saya:

LogLevel alert rewrite:trace3 (can be increased to trace8)

Dari manual:

Mereka yang terbiasa dengan versi mod_rewrite sebelumnya pasti akan mencari arahan RewriteLog dan RewriteLogLevel. Fungsionalitas ini telah sepenuhnya digantikan oleh konfigurasi logging per-modul baru yang disebutkan di atas.

Untuk menyaring pesan-pesan ini di log kesalahan Anda dapat melakukan sesuatu seperti:

tail -f error_log|fgrep '[rewrite:'
codecowboy
sumber
Pertanyaan Anda awalnya ditandai dengan apache-2.2 kan? dan saya mungkin telah mengabaikan versi dalam pertanyaan itu sendiri. Terlihat dengan baik.
HBruijn
Dalam hal ini membantu siapa pun, masalah saya adalah saya mengaktifkan logging di VHost untuk port 80 tetapi tidak 443. Saya menggunakan HTTPS, jadi logging saya tidak berfungsi. Butuh waktu beberapa saat untuk menemukan kesalahan bodoh itu :(
BrianVPS
Saya ingin menambahkan bahwa Anda harus mod_log_debugmengaktifkan ...
thoni56
4

Saya tidak bisa menahan diri untuk mengulangi:

Kebanyakan orang yang menggunakan .htaccess dan menanyakannya di ServerFault tidak boleh menggunakan .htaccess karena itu adalah solusi pengguna akhir yang tidak pernah ditujukan untuk administrator:

Anda harus menghindari menggunakan file .htaccess sepenuhnya jika Anda memiliki akses ke file konfigurasi server utama httpd. Menggunakan .htaccessfile memperlambat server http Apache Anda. Arahan apa pun yang dapat Anda sertakan dalam file .htaccess lebih baik diatur dalam blok Direktori, karena akan memiliki efek yang sama dengan kinerja yang lebih baik.
Sumber: manual Apache

Rupanya sebagian besar orang yang mempublikasikan konfigurasi mereka tampaknya pemrogram pemujaan yang tertarik menyalin file .htac secara membabi buta tanpa memahami alasannya.

Masalah Anda adalah contoh utama: RewriteLogarahan hanya valid dalam konteks konfigurasi server atau host virtual ...

Itu berarti itu tidak diperbolehkan dalam .htaccessfile!

HBruijn
sumber
4
Mencari log adalah apa yang ingin dilakukan seseorang yang ingin belajar, bukan menyalin. Tampaknya Apache telah menyiapkan tangkapan klasik-22: Anda hanya boleh menggunakan .htaccess jika Anda tidak dapat mengakses root server. Tetapi Anda hanya dapat mengaktifkan pencatatan jika Anda dapat mengakses root server. Jika mereka membiarkan Anda melakukan semua penulisan ulang ini.
Mark Berry
5
Beberapa aplikasi seperti Wordpress menghasilkan file .htaccess yang perlu di-debug. Ini tampaknya menjadi masalah di sini. Logging dari file .htaccess adalah langkah logis pertama ketika Anda mencoba mencari tahu ekspresi reguler orang lain yang tidak bisa dipahami.
KeithL