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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top