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.

Jawaban:


99

dari baris perintah, ketik

sudo a2enmod menulis ulang

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


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.


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.


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!"; ?>

15

menghibur:

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

sudo a2enmod rewrite
sudo service apache2 restart

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.


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.


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


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)


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.


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


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


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


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>

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 #


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";

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.

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.