2010-04-14 3 views
6

ho notato che a volte (soprattutto dove mod_rewrite non è disponibile) questo schema percorso viene utilizzato:Quanto sono affidabili URI come /index.php/seo_path

http://host/path/index.php/clean_url_here 
--------------------------^ 

Questo sembra a lavorare, almeno in Apache, dove viene chiamato index.php e si può interrogare la parte /clean_url_here tramite $_SERVER['PATH_INFO']. PHP anche kind of advertises questa funzione. Inoltre, ad esempio, il framework CodeIgniter utilizza questa tecnica come predefinita per i relativi URL.

La domanda: Quanto è affidabile la tecnica? Ci sono situazioni in cui Apache non chiama il numero index.php ma tenta di risolvere il percorso? Che mi dici di lighttpd, nginx, IIS, AOLServer?

Una domanda ServerFault? Penso che abbia più a che fare con l'utilizzo di questa funzionalità all'interno del codice PHP. Perciò chiedo qui.

Addendum: Come suggerito da VolkerK, una ragionevole estensione a questa domanda è: Come può un influsso programmatore l'esistenza di $_SERVER['PATH_INFO'] su vari tipi di server?

risposta

4

Penso che questa sia una domanda che è ugualmente adatta per stackoverflow e serverfault. Per esempio. Io come sviluppatore posso solo dirti che pathinfo è affidabile come qualsiasi input dell'utente (il che significa che può contenere praticamente qualsiasi cosa) e il tuo script può o non può riceverlo a seconda della versione e configurazione del webserver:

Apache: AcceptPathInfo
IIS: ad es. AllowPathInfoForScriptMappings e altri
e così via e via ...

Ma gli amministratori di server, eventualmente, può dire quali impostazioni si può aspettare "nel mondo reale", e perché tali impostazioni sono preferiti.
Quindi la domanda diventa: quanta influenza avete (o la base utente prevista) sulla configurazione del server.

+0

Grazie per i collegamenti Apache e IIS. Dopo un po 'di googling (basato sulla conoscenza appena acquisita su AcceptPathInfo), ho trovato anche una soluzione per nginx: http://kbeezie.com/view/php-self-path-nginx/ – Boldewyn

0

Dalla mia esperienza direi che PATH_INFOè solitamente disponibili nei normali ambienti di web hosting e le impostazioni del server - anche su IIS - ma in rare occasioni, non lo è. Quando si costruisce un'applicazione che dovrebbe essere distribuibile su quante più piattaforme possibile, non mi fiderei su path_info a livello hard-coded.

ogni volta che posso, cerco di costruire una funzione wrapper build_url() che, a seconda di un'impostazione di configurazione, utilizza sia

  • l'URL grezzo www.example.com/index.php?clean_url=clean_url_here
  • il PATH_INFO meccanismo di www.example.com/index.php/clean_url
  • mod_rewrite www.example.com/clean_url

e utilizzarlo in tutti gli URL che l'applicazione emette.

+0

L'astrazione è sempre una buona idea , d'accordo. Tuttavia, mi piacerebbe conoscere in particolare le esperienze PATH_INFO e la disponibilità di questa funzionalità. – Boldewyn

0

Potrebbero esserci degli script ingenui (ad esempio il collegamento automatico) che non riconoscono il formato di questo URL.In tal modo diminuendo la possibilità che vengano creati collegamenti ai tuoi contenuti.
Poiché i modelli di espressione regolare di origine locale sono comuni per queste attività, la possibilità di errore è abbastanza reale.

Tecnicamente, questi URL vanno bene. Per quanto riguarda il SEO, sono "meno perfetti".