Cara mengaktifkan mod_rewrite untuk Apache 2.2

474

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?

Jakub Arnold
sumber
1
sebenarnya masalahnya adalah bahwa saya memiliki jalan yang salah, karena $ {DOCUMENT_ROOT} menunjuk saya ke direktori root yang ok pada hosting, tetapi salah pada lokal, jadi masalahnya bukan hanya RewriteEngine On, yang sudah saya miliki ..
Jakub Arnold
Bisakah Anda mengubah jawaban yang diterima untuk yang ini ? Penulis jawaban yang diterima saat ini mengakui itu tidak cukup baik.
Shadow Wizard adalah Ear For You
1
Cara mengaktifkan mod_rewrite di Ubuntu 12.04 LTS (harus bekerja di Debian juga) . Ini menunjukkan instalasi DAN aktivasi, tutorial di bawah ini secara mengejutkan tidak melakukan :(
Sliq
3
Saya akan sangat menyarankan semua orang yang ingin mengaktifkan arahan mod_rewrite dalam file .htacces untuk digunakan AllowOverride FileInfoalih-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 bagikan AllowOverride All. RTFM! , itu berhenti jelas pada subjek.
RemyNL
1
@ Black Ada di file konfigurasi Apache bernama httpd.conf. Di PC saya, ada di direktori C: \ xampp \ apache \ conf, karena saya menginstal Apache dengan XAMPP.
Lex Soft

Jawaban:

1005

Untuk menggunakan mod_rewriteAnda dapat mengetik perintah berikut di terminal:

sudo a2enmod rewrite

Mulai ulang apache2 setelahnya

sudo /etc/init.d/apache2 restart

atau

sudo service apache2 restart

atau sesuai Cara Kontrol Sistem terpadu yang baru

sudo systemctl restart apache2

Kemudian, jika Anda mau, Anda dapat menggunakan .htaccessfile berikut .

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

File di atas .htaccess(jika ditempatkan di Anda DocumentRoot) akan mengalihkan semua lalu lintas ke index.phpfile di DocumentRootkecuali file itu ada.

Jadi, katakanlah Anda memiliki struktur direktori berikut dan httpdocs adalah DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

File apa pun yang ada di httpdocs akan disajikan ke pemohon menggunakan yang .htaccessditunjukkan di atas, namun, semua yang lain akan diarahkan ke httpdocs/index.php. File aplikasi Anda includes/apptidak akan dapat diakses.

Jonathan Mayhak
sumber
15
Ide-ide di sini benar untuk CLI UNIX tetapi perintah hanya bekerja untuk distribusi Linux berbasis Debian dan bukan lingkungan Windows OP.
Jason Rikard
17
a2enmod menulis ulang berhasil
Dr Casper Black
98
Catatan lebih lanjut: Anda juga perlu memastikan bahwa konfigurasi situs Anda AllowOverride Allagar .htaccessfile dapat dibaca sama sekali.
Adam Rosenfield
2
@Dennis Anda dapat menggunakan penulisan ulang a2dismod
Jonathan Mayhak
3
bagaimana saya bisa menggunakan a2enmod rewritedi windows?
Naman
229

Untuk situasi saya, saya punya

RewriteEngine On

di saya .htaccess, bersama dengan modul yang sedang dimuat, dan itu tidak berfungsi.

Solusi untuk masalah saya adalah mengedit entri vhost saya ke inlcude

AllowOverride all

di <Directory>bagian situs yang dimaksud.

Mike Wazowski
sumber
10
Memang, bahkan dengan a2enmod rewrite& RewriteEngine Ondalam .htaccess- keberadaan AllowOverride alldalam file VirtualHost akan mencegahnya bekerja - ini yang membuat saya ketahuan, mengubahnya menjadi AllowOverride allbekerja seperti pesona :)
HeavenCore
9
pemula di sini .. di mana file VirtualHost?
davneet
3
INI adalah cara untuk pergi ... Saya telah mengatur segalanya kecuali untuk ini.
arrayown
2
The AllowOverridedirektif menentukan "Jenis arahan yang diperbolehkan dalam .htaccessfile". Lebih jauh lagi, "Ketika arahan ini diatur ke None, maka .htaccessfile benar-benar diabaikan. Dalam hal ini, server bahkan tidak akan mencoba untuk membaca .htaccessfile dalam sistem file." Dokumen resmi: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck
Ini memperbaikinya untuk saya - saya punya masalah dengan WordPress permalinks cantik tidak berfungsi dengan benar. Jika Anda melakukannya a2enmod rewritedan 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.
Jason Preston
83

Coba tetapkan: AllowOverride All.


Masalah paling umum kedua adalah tidak memiliki mod rewrite diaktifkan: a2enmod rewritedan kemudian restart apache.

Jarrod
sumber
Ini harus menjadi jawaban # 1 karena memecahkan masalah yang terjadi pada instalasi ubuntu default!
Sliq
1
Ini akan memungkinkan .htaccess untuk menimpa konfigurasi apache lainnya. Ini tidak disarankan.
Bhargav Nanekalva
Ya :) ini adalah masalah saya juga, tetapi di sini adalah tempat yang Anda jelaskan untuk pemula seperti saya bahwa "AllowOverride All" ini ada di /etc/apache2/sites-available/[sitename[.conf dan [sitename-ssl] .conf. Saya harus melakukan penelitian kedua karena Anda: D, terima kasih omong-omong!
MetaTron
77

Jika tidak ada yang di atas berfungsi cobalah mengedit / etc / apache2 / sites-enabled / 000-default

hampir di bagian atas Anda akan menemukan

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

Ubah AllowOverride NonekeAllowOverride All

ini bekerja untuk saya

Martin Sax
sumber
Kesalahan /laravel/public/authors was not found on this server/index.php was not found on this server
berganti
tidak dapat menemukan <Directory>, hanya <VirtualHost *: 80>
Nicolas S.Xu
1
@ NicolasS.Xu tempatkan ini di tag <VirtualHost *: 80>
wimdetr
Saya telah melakukan hal yang sama tetapi menambahkan bagian baru <Directory /var/www/html>untuk menerapkan aturan dari folder ini dan hanya ke atas.
Louis Loudog Trottier
44

Di Ubuntu:

Lari:

a2enmod rewrite

lalu:

service apache2 restart

mod_rewrite sekarang akan diaktifkan!

Nickleefly
sumber
28

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

  1. Buka konsol Anda dan ketik di dalamnya, ini:

    sudo a2enmod rewrite

  2. Mulai ulang server apache Anda.

    service apache2 restart

Masalah 2

  1. 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).

  2. Temukan "Direktori / var / www /"

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

  1. Ketikkan ini ke konsol:

    sudo a2enmod userdir

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

Kripa Jayakumar
sumber
2
Kerusakan besar dari masalah ini.
Banago
Jangan gunakan AllowOverride Allkarena akan mengaktifkan terlalu banyak fitur berbahaya (seperti menggunakan skrip perl). Alih-alih gunakanAllowOveride Options
Marki555
28

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 bernama apache2.conf. Anda harus mengedit yang itu (Anda harus memiliki izin root). Ubah teks direktori seperti ini

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

Sekarang restart apache.

service apache2 reload

Semoga berhasil.

Ijas Ahamed N
sumber
Ini adalah jawaban terbaru.
paulc
1
Jika Anda berada di tahun 2019 dan seterusnya, harap jawab jawaban ini :)
Luiz Cavalcanti
27

Buka terminal dan ketik a2enmod rewrite, ini akan memungkinkan mod_rewritemodul Anda untuk Apache.

Lalu pergi ke /etc/apache2/sites-availabledan 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

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

Sekarang restart apache Anda dengan /etc/init.d/apache2 restartatauservice apache2 restart

Ikuti tes URL bersih lagi dan kali ini akan berlalu.

Umesh Patil
sumber
15

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

#LoadModule rewrite_module modules/mod_rewrite.so

tidak dikomentari:

LoadModule rewrite_module modules/mod_rewrite.so

Juga, jika Anda ingin mengaktifkan RewriteEngine secara default, Anda mungkin ingin menambahkan sesuatu seperti

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

ke akhir file httpd.conf Anda.

Jika tidak, pastikan Anda menentukan

RewriteEngine On

suatu tempat di file .htaccess Anda.

Danny Battison
sumber
@gabehabe avatar Anda baru saja tampak seperti sedang memegang ikon doc saya, lol
Jonathan dos Santos
5

Saya baru saja melakukan ini

sudo a2enmod rewrite

maka Anda harus memulai kembali layanan apache dengan mengikuti perintah

sudo service apache2 restart
pengguna3470929
sumber
4

Gunakan perintah di bawah ini

sudo a2enmod rewrite

Dan restart apache melalui perintah di bawah ini

sudo service apache2 restart
prasoon
sumber
3

Jelas ada lebih dari satu cara untuk melakukannya, tetapi saya akan menyarankan menggunakan lebih banyak standar:

ErrorDocument 404 /index.php?page=404
Michael Cramer
sumber
3

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

Garrett Ellis
sumber
2

Apa yang berhasil untuk saya (di ubuntu):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

Juga, seperti yang telah disebutkan, pastikan AllowOverride alldiatur di bagian yang relevan dari/etc/apache2/sites-available/default

Benubird
sumber