Saya sudah menginstal baru Apache 2.2 pada mesin Vista saya, semuanya berfungsi dengan baik, kecuali mod menulis ulang.
Saya belum komentar
LoadModule rewrite_module modules/mod_rewrite.s
tetapi tidak ada aturan penulisan ulang saya yang berfungsi, bahkan yang sederhana sekalipun
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Semua aturan yang saya gunakan bekerja pada hosting saya, jadi mereka harusnya ok, jadi pertanyaan saya adalah, apakah ada hal tersembunyi dalam konfigurasi apache, yang dapat memblokir mod menulis ulang?
apache
mod-rewrite
Jakub Arnold
sumber
sumber
AllowOverride FileInfo
alih-alih mengizinkan semuanya, seperti SEMUA jawaban di halaman ini menyarankan. Sedih melihat semua jawaban ini mengambil pendekatan as-long-it-works-it's-okay-bukannya mencoba memahami konsekuensi dari 'solusi' yang diusulkan. Cobalah untuk memahami apa yang Anda lakukan di server Anda dan bagaimana membatasi hak istimewa yang baru saja Anda bagikanAllowOverride All
. RTFM! , itu berhenti jelas pada subjek.Jawaban:
Untuk menggunakan
mod_rewrite
Anda dapat mengetik perintah berikut di terminal:Mulai ulang apache2 setelahnya
atau
atau sesuai Cara Kontrol Sistem terpadu yang baru
Kemudian, jika Anda mau, Anda dapat menggunakan
.htaccess
file berikut .File di atas
.htaccess
(jika ditempatkan di AndaDocumentRoot
) akan mengalihkan semua lalu lintas keindex.php
file diDocumentRoot
kecuali file itu ada.Jadi, katakanlah Anda memiliki struktur direktori berikut dan httpdocs adalah
DocumentRoot
File apa pun yang ada di httpdocs akan disajikan ke pemohon menggunakan yang
.htaccess
ditunjukkan di atas, namun, semua yang lain akan diarahkan kehttpdocs/index.php
. File aplikasi Andaincludes/app
tidak akan dapat diakses.sumber
AllowOverride All
agar.htaccess
file dapat dibaca sama sekali.a2enmod rewrite
di windows?Untuk situasi saya, saya punya
di saya
.htaccess
, bersama dengan modul yang sedang dimuat, dan itu tidak berfungsi.Solusi untuk masalah saya adalah mengedit entri vhost saya ke inlcude
di
<Directory>
bagian situs yang dimaksud.sumber
a2enmod rewrite
&RewriteEngine On
dalam.htaccess
- keberadaanAllowOverride all
dalam file VirtualHost akan mencegahnya bekerja - ini yang membuat saya ketahuan, mengubahnya menjadiAllowOverride all
bekerja seperti pesona :)AllowOverride
direktif menentukan "Jenis arahan yang diperbolehkan dalam.htaccess
file". Lebih jauh lagi, "Ketika arahan ini diatur keNone
, maka.htaccess
file benar-benar diabaikan. Dalam hal ini, server bahkan tidak akan mencoba untuk membaca.htaccess
file dalam sistem file." Dokumen resmi: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
dan kemudian dalam perubahan file VirtualHosts 'AllowOverride None' menjadi 'AllowOverride All' itu harus berfungsi. File VirtualHosts berlaku jika Anda menjalankan beberapa nama domain ke server yang sama (dan alamat IP). Anda harus mengaturnya untuk mengatur domain.Coba tetapkan:
AllowOverride All
.Masalah paling umum kedua adalah tidak memiliki mod rewrite diaktifkan:
a2enmod rewrite
dan kemudian restart apache.sumber
Jika tidak ada yang di atas berfungsi cobalah mengedit / etc / apache2 / sites-enabled / 000-default
hampir di bagian atas Anda akan menemukan
Ubah
AllowOverride None
keAllowOverride All
ini bekerja untuk saya
sumber
/laravel/public/authors was not found on this server
/index.php was not found on this server
<Directory /var/www/html>
untuk menerapkan aturan dari folder ini dan hanya ke atas.Di Ubuntu:
Lari:
lalu:
mod_rewrite
sekarang akan diaktifkan!sumber
Ada banyak cara bagaimana Anda dapat memperbaiki masalah ini, jika Anda tahu akar masalahnya.
Masalah 1
Pertama, ini mungkin masalah dengan apache Anda yang tidak memiliki modul mod_rewrite.c diinstal atau diaktifkan.
Untuk alasan ini, Anda harus mengaktifkannya sebagai berikut
Buka konsol Anda dan ketik di dalamnya, ini:
sudo a2enmod rewrite
Mulai ulang server apache Anda.
service apache2 restart
Masalah 2
Anda juga dapat, selain yang di atas, jika tidak berfungsi, harus mengubah aturan override dari file conf apache (baik apache2.conf, http.conf, atau 000-default file).
Temukan "Direktori / var / www /"
Ubah "Override None" ke "Override All"
Masalah 3
Jika Anda mendapatkan kesalahan yang menyatakan modul penulisan ulang tidak ditemukan, maka mungkin modul userdir Anda tidak diaktifkan. Untuk alasan ini, Anda harus mengaktifkannya.
Ketikkan ini ke konsol:
sudo a2enmod userdir
Kemudian coba aktifkan modul penulisan ulang jika masih tidak diaktifkan (seperti yang disebutkan di atas).
Untuk membaca lebih lanjut tentang ini, Anda dapat mengunjungi situs ini: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
sumber
AllowOverride All
karena akan mengaktifkan terlalu banyak fitur berbahaya (seperti menggunakan skrip perl). Alih-alih gunakanAllowOveride Options
Versi apache baru telah berubah dalam beberapa cara. Jika versi apache Anda adalah 2.4 maka Anda harus pergi ke
/etc/apache2/
. Akan ada file bernamaapache2.conf
. Anda harus mengedit yang itu (Anda harus memiliki izin root). Ubah teks direktori seperti iniSekarang restart apache.
Semoga berhasil.
sumber
Buka terminal dan ketik
a2enmod rewrite
, ini akan memungkinkanmod_rewrite
modul Anda untuk Apache.Lalu pergi ke
/etc/apache2/sites-available
dan edit file default. (Untuk ini, Anda harus memiliki izin yang dapat ditulisi untuk file ini dan folder yang tersedia situs.)Ganti di bawah ini dengan garis yang ada 4 hingga 14
Sekarang restart apache Anda dengan
/etc/init.d/apache2 restart
atauservice apache2 restart
Ikuti tes URL bersih lagi dan kali ini akan berlalu.
sumber
<edit>
Hanya perhatikan Anda mengatakan mod_rewrite.s bukan mod_rewrite.so - harap itu salah ketik dalam pertanyaan Anda dan bukan di file httpd.conf! :)
</edit>
Saya lebih terbiasa menggunakan Apache di Linux, tetapi saya harus melakukan ini beberapa hari yang lalu.
Pertama, lihat di direktori instalasi Apache Anda. (Saya akan menganggap Anda menginstalnya ke "C: \ Program Files" di sini)
Lihatlah di folder: "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules" dan pastikan ada file bernama mod_rewrite.so di sana. (Seharusnya, itu disediakan sebagai bagian dari instalasi default.
Selanjutnya, buka "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf" dan buka httpd.conf. Pastikan baris:
tidak dikomentari:
Juga, jika Anda ingin mengaktifkan RewriteEngine secara default, Anda mungkin ingin menambahkan sesuatu seperti
ke akhir file httpd.conf Anda.
Jika tidak, pastikan Anda menentukan
suatu tempat di file .htaccess Anda.
sumber
Saya baru saja melakukan ini
maka Anda harus memulai kembali layanan apache dengan mengikuti perintah
sumber
Utas lama, hanya ingin menempatkan yang tidak mengatur AllowOverride ke semua alih-alih gunakan mod spesifik yang ingin Anda gunakan,
Dan baris ini harus tidak dikomentari
Refrences
sumber
Gunakan perintah di bawah ini
Dan restart apache melalui perintah di bawah ini
sumber
Jelas ada lebih dari satu cara untuk melakukannya, tetapi saya akan menyarankan menggunakan lebih banyak standar:
sumber
Pertama kali saya berjuang dengan aturan mod_rewrite mengabaikan lalu lintas saya, saya belajar (dengan frustasi) bahwa saya telah menempatkannya di tempat yang salah
<VirtualHost>
, yang berarti bahwa lalu lintas saya akan mengabaikan semuanya, tidak peduli seberapa baik ditulisnya. Pastikan ini tidak terjadi pada Anda:# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Parameter ini akan diaktifkan jika Anda melakukan restart Apache dengan anggun, sehingga Anda dapat mendaur ulangnya dalam dan memonitor perilaku mod_rewrite. Setelah masalah Anda teratasi, putar kembali RewriteLogLevel dan rayakan.
Dalam 100% pengalaman saya, saya telah menemukan bahwa RewriteLog telah membantu saya menemukan masalah dengan aturan penulisan ulang saya. Saya tidak bisa merekomendasikan ini cukup. Semoga berhasil dalam pemecahan masalah Anda!
Juga, bookmark ini adalah teman terbaik Anda: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
sumber
Apa yang berhasil untuk saya (di ubuntu):
Juga, seperti yang telah disebutkan, pastikan
AllowOverride all
diatur di bagian yang relevan dari/etc/apache2/sites-available/default
sumber