Perché il mio file .htaccess il reindirizzamento al percorso del server completo invece di percorso relativo?

StackOverflow https://stackoverflow.com/questions/2542820

Domanda

Non ho mai avuto un problema con cakePHP prima, ma qualcosa di strano in questo server e sta causando il redirect nei file .htaccess a comportarsi in modo strano.

CakePHP utilizza mod_rewrite nel file .htaccess per reindirizzare le richieste a una propria cartella webroot. Il problema è che i redirect sono elencando il sentiero sbagliato e causando un errore 404. La mia applicazione CakePHP, che viene memorizzato nella directory in lista, ha un file .htaccess come segue:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$ app/webroot/    [R=301,L]
    RewriteRule    (.*) app/webroot/$1 [R=301,L]
</IfModule>

(* notare che l'R = 301 provoca un reindirizzamento esterno in modo che possiamo vedere ciò che accade dalla nostra estremità. Dovrebbe davvero omettere questo flag e fare il reindirizzamento internamente, trasparente per gli utenti finali)

Questo dovrebbe reindirizzare qualsiasi richiesta da http://hostname.com/~username/listings/ a http://hostname.com/~username/listings/app/webroot/ Tuttavia, piuttosto che la semplice aggiunta “app/webroot/” alla fine, come si suppone, si sta aggiungendo il percorso completo del server (/home/username/public_html/listings/app/webroot/) con conseguente http://hostname.com/home/username/public_html/listings/app/webroot/ URL finale che è ovviamente corretta e fa scattare un errore di 404.

L'hosting è su un account di hosting condiviso, in modo che limita quello che posso fare con le impostazioni. Non ho mai visto questo accadere prima, e sto pensando che sia qualcosa che non va dal lato di hosting delle cose, ma se qualcuno ha qualche suggerimento utile allora io li posso mettere alla società di hosting pure.

È stato utile?

Soluzione

La soluzione alla tua domanda può essere trovato verso la parte inferiore di questo pagina nel libro CakePHP:

  

Per molti servizi di hosting (GoDaddy, 1and1), il server web è effettivamente servita da una directory utente che già utilizza mod_rewrite. Se si sta installando CakePHP in una directory utente ( http://example.com/~username/cakephp/ ), o di qualsiasi altra struttura URL che utilizza già mod_rewrite, avrete bisogno di aggiungere istruzioni RewriteBase ai file .htaccess CakePHP usi (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

Ho schierato CakePHP dalla cartella public_html di mio profilo pure. Ho dovuto cambiare 3 gli stessi file .htaccess di cui sopra. Basta aggiungere RewriteBase /~username/ ai file .htaccess subito dopo RewriteEngine on!

Altri suggerimenti

Prova a rimuovere .htaccess dal file principale ... Ha funzionato per me

E 'stato abbastanza semplice (utilizzando uolhost condiviso host):

Modifica sia .htaccess file:

/webroot/.htaccess

/. .Htaccess

Aggiungere la seguente riga: RewriteBase /

Qui è l'intero file /webroot/.htaccess:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top