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
Apri la tua console e digita in essa, questo:
sudo a2enmod rewrite
Riavvia il tuo server Apache.
service apache2 restart
Problema 2
È 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).
Individua “Directory / var / www /”
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.
Digita questo nella console:
sudo a2enmod userdir
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! 🙂
Modifica>
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