Come abilitare mod_rewrite per Apache 2.2

Ho una nuova installazione di Apache 2.2 sulla mia macchina Vista, tutto funziona bene, tranne la riscrittura mod.

Ho commentato

LoadModule rewrite_module modules/mod_rewrite.s 

ma nessuna delle mie regole di riscrittura funziona, anche quelle semplici come

 RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404 

Tutte le regole che sto usando funzionano sul mio hosting, quindi dovrebbero essere ok, quindi la mia domanda è, c’è qualche cosa nascosta nella configurazione di Apache, che potrebbe bloccare la riscrittura mod?

Per usare mod_rewrite puoi digitare il seguente comando nel terminale:

 sudo a2enmod rewrite 

Riavvia apache2 dopo

 sudo /etc/init.d/apache2 restart 

o

 sudo service apache2 restart 

o secondo la nuova modalità di controllo del sistema unificata

 sudo systemctl restart apache2 

Quindi, se lo desideri, puoi utilizzare il seguente file .htaccess .

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

Il file .htaccess sopra riportato (se inserito nella DocumentRoot ) reindirizzerà tutto il traffico verso un file index.php in DocumentRoot meno che il file non esista.

Supponiamo che tu abbia la seguente struttura di directory e httpdocs sia DocumentRoot

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

Qualsiasi file esistente in httpdocs verrà servito al richiedente utilizzando l’ .htaccess mostrato sopra, tuttavia, tutto il resto verrà reindirizzato a httpdocs/index.php . I file dell’applicazione in includes/app non saranno accessibili.

Per la mia situazione, ho avuto

 RewriteEngine On 

nel mio .htaccess , insieme al modulo in fase di caricamento, e non funzionava.

La soluzione al mio problema era di modificare la mia voce vhost in inlcude

 AllowOverride all 

nella sezione per il sito in questione.

Ne ho parlato in un articolo: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu

Prova a impostare: AllowOverride All .


Il secondo problema più comune non è la riscrittura abilitata: a2enmod rewrite e quindi riavvia apache.

Se non funziona, prova a modificare / etc / apache2 / sites-enabled / 000-default

quasi in cima troverai

  Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all  

Modificare AllowOverride None su AllowOverride All

questo ha funzionato per me

In Ubuntu:

Correre:

 a2enmod rewrite 

e poi:

 service apache2 restart 

mod_rewrite sarà ora abilitato!

Ci sono molti modi in cui puoi risolvere questo problema, se conosci la radice del problema.

Problema 1

In primo luogo, potrebbe essere un problema con il tuo apache che non ha il modulo mod_rewrite.c installato o abilitato.

Per questo motivo, dovresti abilitarlo come segue

  1. Apri la tua console e digita in essa, questo:

    sudo a2enmod rewrite

  2. Riavvia il tuo server Apache.

    service apache2 restart

Problema 2

  1. È inoltre ansible, in aggiunta a quanto sopra, se non funziona, modificare la regola di sovrascrittura dal file di configurazione di apache (apache2.conf, http.conf o file di default 000).

  2. Individua “Directory / var / www /”

  3. Modifica “Ignora Nessuno” su “Sostituisci tutto”

Problema 3

Se si verifica un errore che indica che il modulo di riscrittura non è stato trovato, probabilmente il proprio modulo userdir non è abilitato. Per questo motivo è necessario abilitarlo.

  1. Digita questo nella console:

    sudo a2enmod userdir

  2. Quindi prova a abilitare il modulo di riscrittura se ancora non abilitato (come menzionato sopra).

Per leggere ulteriori informazioni su questo, è ansible visitare questo sito: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

Aprire il terminale e digitare a2enmod rewrite , abiliterà il modulo mod_rewrite per Apache.

Quindi vai su /etc/apache2/sites-available e modifica il file predefinito. (Per questo devi avere permessi scrivibili per questo file e cartella disponibile per i siti.)

Sostituisci sotto con le linee esistenti da 4 a 14

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

Ora riavvia il tuo apache da /etc/init.d/apache2 restart o /etc/init.d/apache2 restart service apache2 restart

Prendi di nuovo pulito il test URL e questa volta verrà passato.

La nuova versione di apache ha dei cambiamenti in qualche modo. Se la tua versione di apache è 2.4, devi andare in /etc/apache2/ . Ci sarà un file chiamato apache2.conf . Devi modificarlo (dovresti avere i permessi di root). Cambia il testo della directory come questo

  Options Indexes FollowSymLinks AllowOverride All Require all granted  

Ora riavvia apache.

 service apache2 reload 

Spero funzioni.

Appena notato hai detto mod_rewrite.s invece di mod_rewrite.so – spero che sia un refuso nella tua domanda e non nel file httpd.conf! 🙂

Sono più abituato ad usare Apache su Linux, ma l’altro giorno ho dovuto farlo.

Innanzitutto, dai un’occhiata alla directory di installazione di Apache. (Suppongo che tu l’abbia installato su “C: \ Programmi” qui)

Dai uno sguardo alla cartella: “C: \ Programmi \ Apache Software Foundation \ Apache2.2 \ modules” e assicurati che ci sia un file chiamato mod_rewrite.so. (Dovrebbe essere, è fornito come parte dell’installazione predefinita.

Quindi, aprire “C: \ Programmi \ Apache Software Foundation \ Apache2.2 \ conf” e aprire httpd.conf. Assicurati che la linea:

 #LoadModule rewrite_module modules/mod_rewrite.so 

è senza commento:

 LoadModule rewrite_module modules/mod_rewrite.so 

Inoltre, se si desidera abilitare RewriteEngine per impostazione predefinita, è ansible aggiungere qualcosa di simile

  RewriteEngine On  

alla fine del tuo file httpd.conf.

In caso contrario, assicurati di specificare

 RewriteEngine On 

da qualche parte nel tuo file .htaccess.

L’ho appena fatto

 sudo a2enmod rewrite 

allora devi riavviare il servizio Apache seguendo il comando

 sudo service apache2 restart 

C’è ovviamente più di un modo per farlo, ma suggerirei di usare lo standard più:

 ErrorDocument 404 /index.php?page=404 

La prima volta che ho lottato con le regole mod_rewrite ignorando il mio traffico, ho appreso (frustrato) che li avevo posizionati nel sbagliato, il che significava che il mio traffico li avrebbe ignorati tutti , non importa quanto fossero ben scritti. Assicurati che questo non ti stia succedendo:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

Questi parametri si attiveranno se si esegue un riavvio aggraziato di Apache, quindi è ansible riciclarli e monitorare attentamente il comportamento mod_rewrite. Una volta risolto il problema, ritriggers RewriteLogLevel e festeggia.

Nel 100% della mia esperienza, ho scoperto che il RewriteLog mi ha aiutato a scoprire il problema con le mie regole di riscrittura. Non posso raccomandarlo abbastanza Buona fortuna nella risoluzione dei problemi!

Inoltre, questo segnalibro è il tuo migliore amico: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

Consiglio vivamente a tutti coloro che desiderano abilitare le direttive mod_rewrite nei file .htacces per utilizzare AllowOverride FileInfo invece di consentire tutto, poiché TUTTE le risposte in questa pagina suggeriscono. Triste vedere tutte queste risposte prendere l’approccio che va avanti così come funziona, invece di cercare di capire le conseguenze della “soluzione” proposta. Cerca di capire cosa stai facendo sul tuo server e come limitare i privilegi che hai appena distribuito con AllowOverride All . RTFM! , è abbastanza chiaro sull’argomento. Vieni ragazzi, non è rocketscience, è solo un server web!

Vecchio thread, voglio solo mettere che non impostare AllowOverride a tutti, invece di usare la mod specifica che vuoi usare,

 AllowOverride mod_rewrite mod_mime 

E questa linea dovrebbe essere non commentata

 LoadModule rewrite_module modules/mod_rewrite.so 

refrences

Cosa ha funzionato per me (in ubuntu):

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

Inoltre, come già accennato, assicurati che AllowOverride all sia impostato nella sezione pertinente di /etc/apache2/sites-available/default