Abilita la riscrittura degli URL (mod_rewrite) usando i file .htaccess in ~ / Sites su Lion


13

Non riesco a far funzionare mod_rewrite su Lion. Sto sviluppando un numero di siti Web localmente, in ~ / Sites, utilizzando file .htaccess. Sono su 10.7.3 e non ho toccato alcun file di configurazione tranne che per abilitare PHP in httpd.conf (che funziona).

So che ci sono almeno 2 domande su questo qui, ma le soluzioni dettagliate non funzionano. Né le altre soluzioni che ho trovato sul web. Devo fare qualcosa di stupido o trascurare qualcosa, altrimenti probabilmente sto impazzendo, ma non funziona.

Ho provato tutte le solite cose:

  1. In /private/etc/apache2/users/<myusername>.conf, AllowOverride Nonepassa a AllowOverride Alle riavvia il server web

  2. Inoltre, in /private/etc/apache2/httpd.conf, modifica qualsiasi / tutte le occorrenze di AllowOverride Nonein AllowOverride All- L'ho provato in tutti i vari luoghi in cui si trovano queste direttive

  3. Prova sostanzialmente tutte le possibili combinazioni di valori per la Optionslinea sopra / sotto la AllowOverridelinea, inclusi i valori:Indexes MultiViews FollowSymLinks All

Naturalmente, riavvia sempre il server Web dopo tale modifica. Niente di tutto questo funziona. Tutti i miei URL puliti semplicemente non funzionano; Ottengo un 404 - non trovato. Il registro degli errori di Apache mi dà solo errori "Il file non esiste:". Quindi sembra che il modulo mod_rewrite non funzioni nemmeno.

Mi sono assicurato che mod_rewrite sia caricato in httpd.conf, che è; è così di default su un'installazione Lion.

La cosa folle è che tutto ha funzionato perfettamente, fino a quando non sono migrato su una nuova macchina con Lion. Cioè, sto escludendo un errore nei miei file .htaccess perché so che ha funzionato prima. Inoltre, se si fosse verificato un errore in .htaccess, avrei ricevuto una sorta di messaggio di errore dal modulo mod_rewrite nel log_errore di Apache, almeno per dirmi che il modulo stesso viene chiamato. Ma questo non sta succedendo.

Sto trascurando qualcosa? Devo modificare le impostazioni di configurazione da qualche altra parte? Devo cambiare la configurazione di PHP? Perché le istruzioni (come Come attivare mod_rewrite su MacOSX Lion e far funzionare mod_rewrite su Mac OS X ) funzionano per altre persone ma non per me? :)

Ho già perso ore su questo. Qualsiasi aiuto sarebbe MOLTO apprezzato.


A proposito, non voglio usare MAMP. Ho usato MAMP prima e non funzionava bene con MySQL che è già sul mio sistema. Questo sarebbe sostituire un mal di testa con un altro mal di testa, quindi no grazie :)
Niels Heidenreich

A proposito, sono su OS X Lion standard, NON Lion Server.
Niels Heidenreich,

Questo non risponde alla domanda, ma un'alternativa alla lotta con l'ambiente locale del tuo Mac per fare sviluppo web è usare qualcosa come Vagrant , che ti consente di impostare e gestire facilmente le configurazioni di macchine virtuali.
Dan J

Risposte:


12

Dovresti assicurarti che nel tuo /etc/apache2/users/username.conf tu abbia il seguente:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

I followSymlink e AllowOverride sono essenziali qui. Mentre stai accennando a entrambi nella tua domanda, forse non li hai configurati correttamente in tandem.

Assicurati che anche httpd.conf /private/etc/apache2/extra/httpd-userdir.conf sia incluso. È di default.

Dopo eventuali modifiche, riavviare il server Web per rendere effettive le modifiche.

Se i problemi persistono, forse c'è un problema con le regole di riscrittura effettive. Li stavi già usando anche in un contesto .htaccess? Si noti che in un .htaccess, la regola di riscrittura regex viene confrontata con un URI di richiesta senza la barra iniziale e sempre relativa alla directory in cui risiede .htaccess , mentre in un httpd.conf globale l'URI deve corrispondere con una barra e rispetto alla radice web. Poiché presumibilmente hai il tuo .htaccess in una sottodirectory di ~ / Sites, le tue regole di riscrittura potrebbero comportarsi diversamente da quando .htaccess risiede nella radice web di un host (virtuale).

Per eseguire il debug di mod_rewrite è possibile abilitare la registrazione di riscrittura. Dovresti abilitarlo in /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

Grazie Gerry. Sì, l'ho provato; ho appena provato di nuovo; purtroppo non funziona. Non ho cambiato il .htaccess, è in ~ / Sites /…, come era prima. Questo è troppo frustrante :(
Niels Heidenreich

Prova ad abilitare la riscrittura della registrazione come ho modificato sopra.
Gerry

OK, non è affatto un problema con mod_rewrite, come sembra; è il file .htaccess completamente ignorato. Posso inserire qualsiasi spazzatura in esso e non ricevo alcun messaggio di errore. Quindi Apache non lo sta caricando. Ho controllato i permessi, sono ok (il file è leggibile dal mondo). Ho provato a renderlo eseguibile, nessun cambiamento.
Niels Heidenreich,

Se inserisco un .htaccess in / Library / WebServer / Documents e apro " localhost " per testarlo, questo funziona come previsto. Semplicemente non funziona in "~ / Sites".
Niels Heidenreich,

Ho fatto qualcosa di folle e ho creato un secondo account utente con il nome di accesso "testitester". Ho impostato AllowOverride su All in .conf di quell'utente. Ho inserito un file .htaccess contenente posta indesiderata nella cartella dei siti dell'utente. Se vado su localhost / ~ testitester, ricevo un errore 500, come previsto.
Niels Heidenreich,

1

L'aggiunta di opzioni + FollowSymLinks ha funzionato bene per me

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

che cosa sta facendo Options +FollowSymLinks? Ho appena aggiunto che la linea funziona per me
Kannika,

1

Stavo riscontrando un problema simile in cui il mio file .htaccess veniva completamente ignorato mentre ero in una sottocartella all'interno della mia directory ~ / Sites in un VirtualHost configurato correttamente.

Dopo aver trascorso l'ultima ora a giocare con diversi file di configurazione e impostando AllowOverride All in vari punti, ho finalmente scoperto che il file .htaccess, mentre sembrava un file .htaccess in Finder, era in realtà un file .htaccess.txt con il estensione nascosta.

Per controllare e modificare il tuo file .htaccess, fai clic destro su di esso e scegli Ottieni informazioni e quindi assicurati di rimuovere qualsiasi estensione principale dalla fine, come quella che avevo:

E ora funziona!


1

Di seguito le voci .htaccess sono state corrette

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

Inserire .htaccess in / Library / WebServer / Documents e aprire "localhost /"; per testarlo, funziona come previsto. Semplicemente non funziona in "~ / Sites". Grazie Niels Heidenreich per questo!


-1

Quando si digita: / Users / nomeutente / nome_app

Il / si riferisce alla radice del server web:

"Localhost /"

Se usi / ~ username / nome_app nella tua riscrittura dovrebbe funzionare.


1
I percorsi che iniziano con /sono sempre percorsi assoluti per Apache, vedere la definizione della radice del server web in http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
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.