2012-08-06 21 views
10

Iam tenta di reindirizzare la mia home page o qualsiasi altra pagina del sito a una pagina di php particolare. Questo è il mio .htaccess.htaccess che non si legge

Redirect 301 http://test.com/info http://test.com/get_forms_data.php 
Options +FollowSymlinks 
RewriteEngine ON 
RewriteRule ^test.php$ http://test.com/get_forms_data.php [R=301,L] 

Ho controllato il mio .rewrite Apache Server è abilitata.

Ancora non funziona.

+0

Il file ha le autorizzazioni corrette? – Viehzeug

+2

Si verifica un errore quando si introduce deliberatamente un errore nel file? (Per vedere se viene analizzato del tutto) –

+0

@Viehzeug - sì, ho dato le autorizzazioni giuste. – user1411837

risposta

25

Se non importa quello che mettete nel vostro file di .htaccess, non si ottiene nemmeno un errore, il che significa che probabilmente è necessario avere

AllowOverride All

insieme nella configurazione del sito.

Se sei su Ubuntu, il posto dove cercare la configurazione è /etc/apache2/sites-available/. Lì dovresti trovare un file chiamato default se questa è un'installazione di serie dello stack LAMP LOCK predefinito (https://help.ubuntu.com/community/ApacheMySQLPHP).

La parte fondamentale è questo:

<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 

Ora cambia AllowOverride None-AllowOverride All. Dopo di che non dimenticare di riavviare l'apache in questo modo:

$ service apache2 restart 
+0

per me è un altro problema – lbennet

8

In aggiunta alla risposta di Morgan, mettendo AllowOverride All nel vostro host virtuale a volte non basta. Ho avuto questo nella mia host virtuale:

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

che ci si aspetta questo lavoro, non è vero, <Directory /> significa che deve essere applicato ovunque sul file system. Ma .htaccess veniva ancora ignorato. Il riavvio del server non ha aiutato. Ho messo la spazzatura nel file .htaccess per confermare che non veniva letto.

L'errore è stato ipotizzando che un host virtuale sovrascriva la configurazione globale. Un po 'lo fa: la mia configurazione sopra sovrascrive qualsiasi impostazione globale per la directory /. Ma la configurazione globale lo sostituisce per /var/www/ e sotto. La mia soluzione è:

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

(questo assume nessuno degli altri configurazione necessaria per applicare al di fuori /var/www, se lo fa, fare una <Directory /> blocco separato per la configurazione proprio questo speciale.)

1

Stavo lottando con il lo stesso problema, e la risposta di Darren Cook mi ha dato l'indizio definitivo per trovare la soluzione.

La mia app era in una cartella fuori dal percorso pubblico www, è il numero /opt/my_app. non ho potuto creare un VirtualHost, così ho creato un link simbolico in pubblico www Ponting di Apache alla mia cartella:

/var/www/html/my_app -> /opt/my_app

Il fatto è che, nel mio file di configurazione di Apache di App, mi è stato precisando:

<Directory /opt/my_app> 
    AllowOverride All 
</Directory> 

E il mio file .htaccess non veniva letto. Poi ho visto che nella configurazione di Apache c'era questa:

<Directory /var/www/html> 
    AllowOverride None 
</Directory> 

poi ho capito che file di configurazione di Apache non si preoccupano di link simbolici, e quindi la regola generale veniva applicato a foler di mia app. Ho cambiato Directory a:

<Directory /var/www/html/my_app> 
    AllowOverride All 
</Directory> 

e tutto funzionava.

+0

hai reso la mia giornata! grazie mille – netzaffin