Come verificare se mod_rewrite è abilitato sul server?


104

Attualmente sto utilizzando l'hosting con il server Lightspeed . L'hosting dice che mod_rewriteè abilitato ma non riesco a far funzionare il mio script lì. Ogni volta che provo ad accedere all'URL, restituisce 404 - pagina non trovata .

Metto gli stessi codici su un altro server che funziona con Apache. Funziona laggiù. Quindi immagino che sia il problema .htaccesse mod_rewrite.

Ma il supporto all'hosting insiste ancora con me sul fatto che il loro mod_rewrite è attivo, quindi vorrei sapere come posso verificare se è effettivamente abilitato o meno.

Ho provato a controllare con phpinfo(), ma senza fortuna, non riesco a trovare mod_rewritelì, è perché stanno usando lightspeed?

C'è un modo per controllare? Per favore aiutatemi. Grazie.

FYI: il mio .htaccesscodice è

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>

Ho provato anche in questo modo

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]

Ma stesso risultato.

Risposte:


99

dalla riga di comando, digita

sudo a2enmod riscrivere

se la modalità di riscrittura è già abilitata, te lo dirà!


Questo è il modo più semplice per abilitare la riscrittura delle mod.
andromeda

3
SÌ ! Perfetto, semplicemente perfetto.
George Dimitriadis

Lavorato. Semplice e facile. Grazie
biplab sbarca il

97
  1. Per verificare se il modulo mod_rewrite è abilitato, crea un nuovo file php nella cartella principale del tuo server WAMP. Digita il seguente

    phpinfo();

  2. Accedi al file creato dal tuo browser.

  3. CtrlFper aprire una ricerca. Cerca "mod_rewrite". Se è abilitato lo vedi come 'Moduli caricati'

  4. In caso contrario, apri httpd.conf (file di configurazione di Apache) e cerca la riga seguente.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Rimuovere il segno di cancelletto ("#") all'inizio e salvare questo file.

  6. Riavvia il tuo server Apache.

  7. Accedi allo stesso file php nel tuo browser.

  8. Cerca di nuovo "mod_rewrite". Dovresti riuscire a trovarlo ora.


9
Credo che phpinfo () riporti i moduli caricati di Apache quando PHP stesso viene eseguito come modulo Apache. L'OP afferma che PHP è in esecuzione su Lightspeed, che ha il proprio motore di riscrittura compatibile con mod_rewrite.
MrWhite

2
Per il primo passaggio ho dovuto inserire: <? Php echo phpinfo (); ?>
Greg Noe

7
Notare che questo metodo non funzionerà se si esegue PHP come applicazione CGI (come è il caso se phpinfo()il campo "Server API" mostra "CGI / FastCGI"). phpinfo()non elencherà i moduli abilitati. In tal caso, vedi Come verificare la presenza di mod_rewrite su PHP CGI .
Rory O'Kane

67

Se stai utilizzando un file di configurazione degli host virtuali, assicurati che l'host virtuale in questione abbia la direttiva AllowOverride Allda qualche parte in questo modo:

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

Fondamentalmente, questo afferma di consentire l'elaborazione di tutte le direttive .htaccess.


3
Grazie. Ti devo una Budweiser. <3
Nishant Ghodke

cosa significa ...in <Directory ...>? Cosa ci devo mettere? la directory dove si trova .htaccess?
João Pimentel Ferreira

sì, in effetti, il ... dovrebbe menzionare tra virgolette "..." la directory in cui si trova .htaccess
João Pimentel Ferreira

Esso aveva. Avevo copiato il file conf dal server e, sebbene avessi cambiato il ServerName, non avevo cambiato il nome della directory, dopo di che e un riavvio di Apache era ok.
D. Dan

1
Richard Se questa risposta ha funzionato per te e ha risolto il tuo problema, dovresti contrassegnarla come corretta e assegnare a @Jahmic ciò che è dovuto.
Sinthia V

18

Se apache_get_modules () non viene riconosciuto o nessuna informazione su questo modulo in phpinfo (); prova a testare la riscrittura della mod aggiungendo quelle linee nel tuo file .htaccess:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

E mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>

15

console:

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

sudo a2enmod rewrite
sudo service apache2 restart

Ho provato molto per risolverlo e poi quando lo provo funziona per me. Ora ho gli ultimi Apache e Ubuntu.
Fernando Sanchiz

15

Se

in_array('mod_rewrite', apache_get_modules())

restituisce truequindi mod-rewrite è abilitato.


Perfetta soluzione di una riga per controllare il modulo di riscrittura abilitato o meno tramite codici PHP.
Shakeel Ahmed

12

La apache_get_modules()funzione perdefined di PHP restituisce un elenco di moduli abilitati. Per verificare se mod_rewriteè abilitato, puoi eseguire il seguente script sul tuo server:

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

Se l'esempio precedente fallisce, puoi verificare la riscrittura mod usando il tuo .htaccessfile.

Crea un htaccessfile nella root del documento e aggiungi la seguente rewriteRule:

RewriteEngine on

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

Ora visita http://example.com/HelloWorld , verrai reindirizzato internamente alla pagina /index.php del tuo sito. Altrimenti, se mod-rewrite è disabilitato, riceverai un errore 500 del server Internel.

Spero che questo ti aiuti.


io uso 7.2, apache_get_modules non è stato definito. Devo riavviare apache2 dopo la modifica .htaccess?
Adi Prasetyo

1
No, non è necessario riavviare il server quando si utilizza htaccess.
Amit Verma

12

puoi farlo sul terminale, in alternativa:

apachectl -M
apache2ctl -M

tratto da 2daygeek


In Debian 9, funziona ma devi essere loggato come root o usaresudo
androsfat

11

Funziona su CentOS:

$ sudo httpd -M |grep rewrite_module

Dovrebbe produrre rewrite_module (shared)


Questo è il modo migliore per farlo su CentOS, supponendo che tu abbia accesso ssh. Grazie, @radtek!
John T.

10

Se questo codice è nel tuo file .htaccess (senza il controllo di 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]

e puoi visitare qualsiasi pagina del tuo sito con un errore del server 500 Penso che sia sicuro dire che la riscrittura mod è attiva.


3
Quindi puoi accedere ad alcune pagine del sito senza l'errore 500? Ciò significherebbe generalmente se il file .htaccess viene letto che mod_rewrite deve essere attivato. Tuttavia, il file .htaccess potrebbe non essere letto ... prova a scrivere alcuni caratteri senza senso nella parte superiore del tuo file .htaccess, questo causerà la morte della connessione con un errore del server 500 se Apache sta effettivamente leggendo il file. Se viene letto, potresti fornire un esempio di un URL che pensi dovrebbe funzionare ma non funziona?
Clive

il problema è che non è un server Apache, è velocità della luce. Non ricevo mai l'errore 500, tutto quello che ottengo è l'errore 404. Ecco perché dubito che .htaccess non sia abilitato.
Knightrider

Molto probabilmente sì, proverei a mettere i caratteri senza senso in .htaccess e vedere se ottieni l'errore 500 quando vai direttamente a una pagina non riscritta (ad esempio index.php). In caso contrario, potrebbe valere la pena pubblicare una nuova domanda chiedendo come abilitare .htaccess con Lightspeed
Clive

5

Puoi usare la funzione php

      apache_get_modules

e controlla la presenza di mod_rewrite

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

http://in2.php.net/apache_get_modules


2
apache_get_modules () funzionerà solo se PHP è in esecuzione come modulo Apache. L'OP afferma che PHP è in esecuzione su Lightspeed.
MrWhite

5

Se sei in un sistema Linux, puoi controllare tutti i moduli di abilitazione per apache2 (nel mio caso) nella seguente cartella: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

digitare: ll -a
se vuoi controllare i moduli disponibili per la cartella php (in questo caso php 7) /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

digitare: ll -a


4

basta creare una nuova pagina e aggiungere questo codice

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

ed esegui questa pagina, quindi troverai in grado di sapere che il modulo è Disponibile o meno, altrimenti puoi chiedere al tuo hosting o se vuoi abilitarlo nella macchina locale, controlla questo tutorial passo passo di YouTube relativo all'abilitazione del modulo di riscrittura in wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Icona del server Wamp -> Apache -> Moduli Apache e controlla l'opzione del modulo di riscrittura


2

So che questa domanda è vecchia, ma se puoi modificare il tuo file di configurazione di Apache in AllowOverride AlldaAllowOverride 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>

È una buona idea indicare il nome esatto e, quando possibile, la posizione del file che deve essere modificato. Sarà utile per i nuovi arrivati. Grazie
MindRoasterMir

Va inoltre tenuto presente che le modifiche avranno effetto solo dopo aver riaffermato il tuo apache. grazie
MindRoasterMir

1

Hai solo bisogno di controllare se il file è lì, digitando

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

La riga del risultato non può essere commentata a partire da #


1

Questo codice ha funzionato per me:

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

0

Avevo il problema esatto, l'ho risolto facendo clic su struttura personalizzata, quindi aggiungendo /index.php/%postname%/e funziona

Spero che questo eviti a qualcuno lo stress che ho dovuto affrontare per scoprire cosa diavolo c'era di sbagliato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.