Instradare le richieste di pagina con PHP nel modo giusto

Ho bisogno di conoscere il termine e le migliori pratiche di esecuzione del sito di navigazione il "giusto"? in modo simile a come lo stackoverflow ti indirizza quando fai una domanda tramite l'url:

"Http://stackoverflow.com/questions/ask"

Dove, come con la mia conoscenza della programmazione PHP, probabilmente lo codifico in questo modo:

"Http://stackoverflow.com/index.php?p=questions&act=ask"

Spero che tu capisca cosa intendo. Mi piacerebbe conoscere il termine per questo metodo di navigazione della pagina e gestione della richiesta / risposta e, se ansible, le migliori pratiche, limitazioni o qualsiasi altra cosa che devo tenere a mente quando si progetta un'applicazione web usando questo standard / metodo. Inoltre, non so nemless se questo è tutto fatto con PHP o qualche backend web codificato in ASP o Ruby o cosa hai, quindi ho popolato i tag con le mie ipotesi.

Il model utilizzato dalla maggior parte dei framework MVC è un controller anteriore che chiama un router. Il front controller è tipicamente un index.php nella tua web root. Successivamente, tutte le richieste che non sono per file esistenti (come js, css e risorse image) devono essere inviate a questo controller. In Apache, puoi farlo con mod_rewrite :

 RewriteRule ^index\.php$ - [F] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.php [L,QSA] 

Tuttavia, il modo consigliato in Apache 2.5 è con FallbackResource :

 FallbackResource index.php 

IIS ha funzionalità simili se è quello che stai usando.

In index.php , puoi accedere all'URL originariamente richiesto con $_SERVER['REQUEST_URI'] . Dovresti includere il tuo router (che dovrebbe essere al di fuori della web root) e invocarlo con l'URI della richiesta. Esempio:

 require '../router.php'; $router = new Router(); $router->process($_SERVER['HTTP_METHOD'], $_SERVER['REQUEST_URI'], $_GET, $_POST); 

Quindi il router può trovare il controller appropriato per indirizzare la richiesta a. Leggi di più sul framework MVC e studia alcuni esempi per capire meglio come altri l'hanno implementato.

Molto probabilmente usano lo stesso metodo che stai descrivendo (incorporando le variables di navigazione) all'interno dell'URL, ma è stato fatto "sotto il cofano".

Il meccanismo che ti permette di presentare URL come questo è chiamato MOD Rewrite. Utilizza la combinazione delle variables nell'URL e le espressioni regolari per rappresentare nuovamente l'URL per l'utente finale in un modo più user-friendly.

Ulteriori informazioni: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Modifica: Ovviamente questo si applica al codice in esecuzione su server web Apache. Esistono probabilmente moduli simili per altri server Web come IIS.

Inoltre, tieni presente che mod_rewrite è al di fuori dello scopo di php. Sono invece le direttive del server Apache, che vengono invocate prima che anche php entri in gioco.

Attualmente sto sviluppando un router php che è mirato a performance estremamente elevate . probabilmente potresti voler dare un'occhiata:

https://github.com/c9s/Pux

Pux è 48.5 volte più veloce del router symfony nella distribuzione statica delle rotte, 31 volte più veloce nel dispacciamento di espressioni regolari. (con estensione pux installata)

Pux cerca di non consumare tempo di calcolo per build dynamicmente tutti i routes (come Symfony / Routing). Invece, Pux compila i tuoi routes su un semplice arrays PHP per il caching, i routes compilati possono essere caricati dalla cache molto velocemente.

Con il supporto dell'estensione PHP di Pux, puoi caricare e submit i routes 1.5 ~ 2x più velocemente rispetto a Pux PHP puro.