Frage

Zum Beispiel habe ich eine Reihe von URLs, ihre Umschreibungen usw.:

test1.html
catalog/product.html
thank-you
catalog/product/view/id/34

All diese URLs geben 200 OK an die Antwort. Mein Ziel ist es, eingehende URLs zu filtern und keine URLs zuzulassen, die in Magento nicht existieren (404 Antwort, denke ich).

Wie kann ich definieren, dass diese URL 200 OK in Magento verleiht?

War es hilfreich?

Lösung

Ich denke, der sicherste Weg, um herauszufinden, ob eine URL Ihnen 200 oder 404 (oder einen anderen Header) gibt, besteht darin, einen Anruf bei dieser URL zu tätigen. Ansonsten sehe ich keinen sicheren Weg. URLs können gültig sein (catalog/product/view/id/34) Geben Sie Ihnen aber dennoch 404, da das Produkt in dieser Sachansicht deaktiviert oder nicht sichtbar ist. Gleiches gilt für CMS -Seiten URLs (test1.html), ganz zu schweigen davon test1.html Kann die URL für eine benutzerdefinierte Entität sein (keine CMS -Seite).

Andere Tipps

Sie können alle Produkt- und Kategorie -Seiten -URLs aus dem integrierten Sitemap abrufen (siehe Mage_Sitemap_Model_Sitemap::generateXml().

Für die CMS -Seiten müssen Sie die Liste der URLs über eine CMS -Seitensammlung erhalten

$pages = Mage::getResourceModel('cms/page_collection')->getColumnValues('identifier');

Dies deckt alle "SEF" -URLs in Magento ab, wodurch uns die regulären URLs der Route-Controller-Handlung vom Typ Action-Typ zurückgelegt werden.

Das Sammeln der Liste der Routen ist einfach: Mage::getConfig()->getNode()->xpath('./*/routers'), Aber tatsächlich herauszufinden, welche Controller mit Aktionen gültig sind, ist viel mehr involviert.
Ich schlage vor, Sie verwenden die vorhandene Logik von der standard und die admin Router zum Erstellen einer Liste von Controller -Klassen und die Überprüfung jeder dieser auf gültige Aktionen.

Zum Laden der Router können Sie den vorderen Controller verwenden: Mage::app()->getFrontController()->init();

Dann beziehen Sie sich auf Mage_Core_Controller_Varien_Router_Standard::match() Für weitere Details validiert und instanziiert dies die Controller und prüft, ob eine Aktion vorhanden ist.
Möglicherweise möchten Sie den Router so erweitern, dass Sie auf die geschützte Liste der Routen in Ihrer benutzerdefinierten Logik zugreifen können.

In Bezug auf den Teil des Anfragepfads hinter dem route/controller/action, zB Katalog/Produkt/Ansicht /id/44, Ich denke nicht, dass es machbar ist, eine Whitelist für diese hinzuzufügen. Wenn die Route gültig ist, würde ich hoffen, dass die Magento -Logik sicher genug ist, um alle Argumente korrekt zu behandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top