Domanda

Sto sviluppando un framework MVC in PHP da zero; soprattutto per l'esperienza di apprendimento, ma questo potrebbe facilmente finire in un progetto live. Sono andato attraverso questo esercitazione come base e ho ampliato da lì.

Le richieste sono fatti in questo modo:

examplesite.com/controller/action/param1/param2/ e così via ...

E questo è il mio file .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

Quindi, tutte le richieste vanno a index.php e sono instradati al controllore corretta e l'azione da lì. Se viene dato alcun controller o azione, quindi l' 'indice' di default è assunto per entrambi.

Ho un controller indice con un'azione indice, che si suppone sia la home page del mio sito. Posso accedere andando su examplesite.com (dal momento che la parte dell'indice si presume). Ha alcune immagini, un collegamento a un foglio di stile, e alcuni script. Essi sono collegati con percorsi relativi alla index.php. Ho pensato che sarebbe stato perfetto dal momento che tutte le richieste andare a index.php e tutto il contenuto è semplicemente incluso in questa pagina utilizzando php. Questo funziona se vado a examplesite.com. Vedrò tutte le immagini e gli stili, e gli script verrà eseguito. Tuttavia, se vado a examplesite.com/index, sto instradato verso la parte corretta del sito, ma tutti i link non funzionano. Ha il browser che io sia in una cartella diversa?

Mi piacerebbe essere in grado di utilizzare i percorsi relativi per tutti i contenuti nel mio sito, perché altrimenti ho bisogno di usare percorsi assoluti ovunque per assicurarsi che le cose verranno visualizzati. È possibile?

È stato utile?

Soluzione

È necessario un percorso assoluto, perché i browser valutare i relativi percorsi relativi alla richiesta uri corrente (a meno che non si utilizza il tag base, vedi sotto). Intendiamoci però che un percorso assoluto non necesseraly significa che è necessario includere il nome di dominio in esso. Basta iniziare con una barra è sufficiente. E 'il percorso assoluto relativo al server, per così dire.

<img src="/images/bla.gif">

al posto di

<img src="images/bla.gif">

... funzionerà bene.

Come ho mentiond, un altro approccio sarebbe quello di utilizzare il tag base . Ma per ragioni che non riesco a ricordare in questo momento, credo si raccomanda di non usarlo. (Se qualcun altro vuole carillon qui ...)

Altri suggerimenti

IMO immagini, javascript, stili, e altri contenuti statici dovrebbe non essere parte del sistema di routing. Vuol dire che si carica PHP per ogni richiesta (una performance whack), quando Apache potrebbe servire quei file che bene.

Il mio .htaccess sempre lascia file esistenti saltare PHP:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top