Bagaimana cara memeriksa apakah mod_rewrite diaktifkan di server?

104

Saat ini saya menggunakan hosting dengan server lightspeed . Hosting mengatakan mod_rewritediaktifkan tetapi saya tidak bisa membuat skrip saya berfungsi di sana. Setiap kali saya mencoba mengakses URL, ia mengembalikan 404 - halaman tidak ditemukan .

Saya meletakkan kode yang sama di server lain yang berjalan dengan Apache. Ini bekerja di sana. Jadi saya kira, itu .htaccessdan mod_rewritemasalah.

Tetapi dukungan Hosting masih mendesak saya bahwa mod_rewrite mereka aktif, jadi saya ingin tahu bagaimana cara memeriksa apakah itu benar-benar diaktifkan atau tidak.

Saya mencoba untuk memeriksa phpinfo(), tetapi tidak berhasil, saya tidak dapat menemukannya mod_rewrite, apakah karena mereka menggunakan lightspeed?

Apakah ada cara untuk memeriksanya? Tolong bantu saya. Terima kasih.

FYI:.htaccess kode saya adalah

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

Saya mencoba seperti ini juga

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Tapi hasilnya sama.

ksatria pengendara
sumber

Jawaban:

99

dari baris perintah, ketik

sudo a2enmod menulis ulang

jika mode penulisan ulang sudah diaktifkan, itu akan memberi tahu Anda!

KawaiKx
sumber
Ini adalah cara termudah untuk mengaktifkan mod rewrite.
andromeda
3
IYA ! Sempurna, sempurna.
George Dimitriadis
Bekerja. Sederhana dan mudah. Terima kasih
kekalahan biplab
97
  1. Untuk memeriksa apakah modul mod_rewrite diaktifkan, buat file php baru di folder root server WAMP Anda. Masukkan berikut

    phpinfo();

  2. Akses file yang Anda buat dari browser Anda.

  3. CtrlFuntuk membuka pencarian. Cari 'mod_rewrite'. Jika diaktifkan, Anda melihatnya sebagai 'Modul yang Dimuat'

  4. Jika tidak, buka httpd.conf (file Apache Config) dan cari baris berikut.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Hapus tanda pagar ('#') di awal dan simpan file ini.

  6. Mulai ulang server apache Anda.

  7. Akses file php yang sama di browser Anda.

  8. Cari 'mod_rewrite' lagi. Anda seharusnya dapat menemukannya sekarang.

Fadzly Othman
sumber
9
Saya percaya phpinfo () melaporkan Apache Loaded Modules ketika PHP itu sendiri dijalankan sebagai modul Apache. OP menyatakan bahwa PHP berjalan di Lightspeed, yang memiliki mesin penulisan ulang mod_rewrite yang kompatibel.
MrWhite
2
Untuk langkah pertama saya harus memasukkan: <? Php echo phpinfo (); ?>
Greg Noe
7
Perhatikan bahwa metode ini tidak akan berfungsi jika Anda menjalankan PHP sebagai aplikasi CGI (yang merupakan kasus jika kolom phpinfo()"Server API" menunjukkan "CGI / FastCGI"). phpinfo()tidak akan mencantumkan modul yang diaktifkan. Jika demikian, lihat Cara memeriksa mod_rewrite di PHP CGI .
Rory O'Kane
67

Jika Anda menggunakan file konfigurasi host virtual, pastikan host virtual yang dimaksud memiliki arahan AllowOverride Allseperti ini:

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

Pada dasarnya, ini menyatakan untuk mengizinkan pemrosesan semua arahan .htaccess.

Jahmic
sumber
3
Terima kasih. Aku berutang budi padamu Budweiser. <3
Nishant Ghodke
apa artinya ...dalam <Directory ...>? Apa yang harus saya taruh di sana? direktori tempat .htaccess berada?
João Pimentel Ferreira
ya memang, ... harus menyebutkan di antara tanda kutip "..." direktori tempat .htaccess berada
João Pimentel Ferreira
Sudah. Saya telah menyalin file conf dari server, dan sementara saya telah mengubah ServerName, saya tidak mengubah nama direktori, setelah itu dan restart apache tidak apa-apa.
D. Dan
1
Richard Jika jawaban ini berhasil untuk Anda dan memecahkan masalah Anda, Anda harus menandainya sebagai benar dan menghargai @Jahmic haknya.
Sinthia V
18

Jika apache_get_modules () tidak dikenali atau tidak ada info tentang modul ini di phpinfo (); cobalah untuk menguji mod rewrite dengan menambahkan baris tersebut di file .htaccess Anda:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Dan mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
wappy
sumber
15

menghibur:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
sumber
Saya telah mencoba banyak untuk menyelesaikan ini dan kemudian ketika mencoba ini berhasil untuk saya. Saya memiliki apache dan ubuntu terakhir sekarang.
Fernando Sanchiz
15

Jika

in_array('mod_rewrite', apache_get_modules())

kembali truekemudian mod-rewrite diaktifkan.

Shivanshu
sumber
Solusi satu baris yang sempurna untuk memeriksa modul rewrite diaktifkan atau tidak melalui kode PHP.
Shakeel Ahmed
12

apache_get_modules()Fungsi perdefined PHP mengembalikan daftar modul yang diaktifkan. Untuk memeriksa apakah mod_rewritediaktifkan, Anda dapat menjalankan skrip berikut di server Anda:

<?php
print_r(apache_get_modules());
?>

Jika contoh di atas gagal, Anda dapat memverifikasi mod-rewrite menggunakan .htaccessfile Anda .

Buat htaccessfile di root dokumen dan tambahkan rewriteRule berikut:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

Sekarang kunjungi http://example.com/HelloWorld , Anda akan diteruskan secara internal ke halaman /index.php situs Anda. Jika tidak, jika mod-rewrite dinonaktifkan, Anda akan mendapatkan error server Internel 500.

Semoga ini membantu.

Amit Verma
sumber
saya menggunakan 7.2, apache_get_modules tidak terdefinisi. Apakah saya harus memulai ulang apache2 setelah mengedit .htaccess?
Adi Prasetyo
1
Tidak, Anda tidak perlu me-restart server Anda saat menggunakan htaccess.
Amit Verma
12

Anda dapat melakukannya di terminal, baik:

apachectl -M
apache2ctl -M

diambil dari 2daygeek

Adi Prasetyo
sumber
Di Debian 9, ini berfungsi tetapi Anda harus masuk sebagai root atau menggunakansudo
androsfat
11

Ini berfungsi di CentOS:

$ sudo httpd -M |grep rewrite_module

Haruskah keluaran rewrite_module (shared)

radtek
sumber
Ini adalah cara terbaik untuk melakukannya di CentOS, dengan asumsi Anda memiliki akses ssh. Terima kasih, @radtek!
John T.
10

Jika kode ini ada di file .htaccess Anda (tanpa memeriksa mod_rewrite.c)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

dan Anda dapat mengunjungi halaman mana pun di situs Anda dengan mendapatkan kesalahan server 500. Saya pikir aman untuk mengatakan bahwa penulisan ulang mod dihidupkan.

Clive
sumber
3
Jadi Anda dapat mengakses beberapa halaman di situs tanpa kesalahan 500? Itu biasanya berarti jika file .htaccess sedang dibaca, mod_rewrite harus dihidupkan. Namun .htaccess mungkin tidak sedang dibaca ... coba tulis beberapa karakter yang tidak masuk akal di bagian atas file .htaccess Anda, ini akan menyebabkan koneksi mati dengan kesalahan server 500 jika Apache benar-benar membaca file tersebut. Jika sedang dibaca, dapatkah Anda memberikan contoh URL yang menurut Anda berfungsi tetapi tidak?
Clive
masalahnya adalah, ini bukan server apache, ini adalah kecepatan cahaya. Saya tidak pernah mendapatkan error 500, yang saya dapatkan hanyalah error 404. Itulah mengapa saya meragukan bahwa .htaccess tidak diaktifkan.
Knightrider
Kemungkinan besar ya, saya akan mencoba memasukkan karakter yang tidak masuk akal ke .htaccess dan melihat apakah Anda mendapatkan kesalahan 500 ketika Anda langsung membuka halaman yang tidak ditulis ulang (misalnya index.php). Jika tidak, mungkin ada baiknya memposting pertanyaan baru yang menanyakan cara mengaktifkan .htaccess dengan Lightspeed
Clive
5

Anda dapat menggunakan fungsi php

      apache_get_modules

dan periksa mod_rewrite

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules

Miqdad Ali
sumber
2
apache_get_modules () hanya akan berfungsi jika PHP dijalankan sebagai modul Apache. OP menyatakan bahwa PHP berjalan di Lightspeed.
MrWhite
5

Jika Anda menggunakan sistem linux, Anda dapat memeriksa semua modul aktif untuk apache2 (dalam kasus saya) di folder berikut: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

untuk mengetik: ll -a
jika Anda ingin memeriksa modul yang tersedia untuk folder php (dalam hal ini php 7) /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

mengetik: ll -a

Ezequiel De Simone
sumber
4

buat saja halaman baru dan tambahkan kode ini

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

dan jalankan halaman ini kemudian temukan akan dapat mengetahui modul tersedia atau tidak jika tidak maka Anda dapat bertanya ke hosting Anda atau jika Anda ingin mengaktifkannya di mesin lokal maka periksa tutorial langkah demi langkah youtube ini terkait untuk mengaktifkan modul penulisan ulang di wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Ikon server Wamp -> Apache -> Modul Apache dan periksa opsi modul tulis ulang

Hassan Saeed
sumber
2

Saya tahu pertanyaan ini sudah tua tetapi jika Anda dapat mengedit file konfigurasi Apache Anda ke AllowOverride AlldariAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>
Lawrence yang luar biasa
sumber
Sebaiknya beri tahu nama persisnya dan jika memungkinkan lokasi file yang perlu diubah. Ini akan membantu para pendatang baru. Terima kasih
MindRoasterMir
Juga harus diingat bahwa perubahan hanya berlaku setelah Anda menyatakan kembali apache Anda. terima kasih
MindRoasterMir
1

Anda hanya perlu memeriksa apakah file tersebut ada, dengan mengetik

cat /etc/apache2/mods-available/rewrite.load

Baris hasil tidak boleh dikomentari dimulai dengan #

João Pimentel Ferreira
sumber
1

Kode ini berfungsi untuk saya:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";
Keinan Goichman
sumber
0

Saya mengalami masalah yang sebenarnya, saya menyelesaikannya dengan mengklik struktur khusus, lalu menambahkan /index.php/%postname%/dan berhasil

Semoga ini menyelamatkan seseorang dari stres yang saya alami karena menemukan apa yang salah dengannya.

Kyle S
sumber