Come definire se URL esiste in Magento?
Domanda
Per esempio io ho insieme di URL, le loro riscritture, ecc:
test1.html
catalog/product.html
thank-you
catalog/product/view/id/34
Tutto questo URL dà 200 OK in risposta. Il mio obiettivo è quello di filtrare gli URL in entrata e non consentono URL che non esiste all'interno di Magento (404 risposta credo).
Come posso definire che questo URL darà 200 all'interno OK di Magento?
Soluzione
Penso che il modo più sicuro per scoprire se un URL vi darà 200 o 404 (o qualsiasi altro colpo di testa) è quello di effettuare una chiamata a tale URL. Diverso da quello che non vedo un modo sicuro. Gli URL possono essere validi (catalog/product/view/id/34
), ma ancora vi darà 404 perché il prodotto è disattivato o non è visibile in quella vista negozio. Lo stesso vale per CMS pagine URL (test1.html
), per non parlare che test1.html
potrebbe essere l'URL per un'entità personalizzata (non una pagina CMS).
Altri suggerimenti
È possibile ottenere tutto il prodotto e la categoria URL della pagina di dal sviluppato in mappa del sito (vedi Mage_Sitemap_Model_Sitemap::generateXml()
.
Per le pagine CMS, sarà necessario per ottenere l'elenco di URL attraverso una collezione pagina CMS
$pages = Mage::getResourceModel('cms/page_collection')->getColumnValues('identifier');
Questo copre tutte le "SEF" URL di Magento, che ci lascia con il normale percorso controller-action tipo di URL.
Raccolta l'elenco dei percorsi è facile: Mage::getConfig()->getNode()->xpath('./*/routers')
, ma in realtà capire che i controllori con con le azioni sono valide è molto più coinvolto
.
Vi suggerisco di usare la logica esistente dalla standard
e il router admin
per la costruzione di un elenco di classi controller, e il controllo di ogni uno di quelli per azioni valide.
Per caricare i router è possibile utilizzare il front controller: Mage::app()->getFrontController()->init()
;
Quindi si riferiscono a Mage_Core_Controller_Varien_Router_Standard::match()
per ulteriori dettagli, è così che convalida e crea un'istanza del controller e controlla se un'azione è presente.
Si potrebbe desiderare di estendere il router per avere accesso alla lista dei percorsi nella vostra logica personalizzata protetta.
Per quanto riguarda la parte del percorso della richiesta dietro il route/controller/action
, per esempio Catalogo / prodotto / visualizzazione / id / 44 , non credo che sia fattibile per aggiungere una whitelist per quelli.
Se il percorso è valido, mi auguro che la logica Magento è abbastanza sicuro per gestire correttamente qualsiasi argomento.