上記のヒントをどうもありがとう。コアを過負荷にすることなく、コードを「Magento のようなモジュール」に統合しました。
作成するファイルは 3 つだけです。
app/code/local/MyCompany/MyModule/Controller/Varien/Router/Standard.php
app/code/local/MyCompany/MyModule/etc/config.xml
app/etc/modules/MyCompany_MyModule.xml
次app/etc/modules/MyCompany_MyModule.xml
の面白くないものを貼り付けます。
<?xml version="1.0"?>
<config>
<modules>
<MyCompany_MyModule>
<active>true</active>
<codePool>local</codePool>
</MyCompany_MyModule>
</modules>
</config>
app/code/local/MyCompany/MyModule/etc/config.xml
Router-Configuration を貼り付けます。
<?xml version="1.0"?>
<config>
<modules>
<MyCompany_MyModule>
<version>0.1.0</version>
</MyCompany_MyModule>
</modules>
<default>
<web>
<routers>
<standard>
<area>frontend</area>
<class>MyCompany_MyModule_Controller_Varien_Router_Standard</class>
</standard>
</routers>
</web>
</default>
</config>
そして、app/code/local/MyCompany/MyModule/Controller/Varien/Router/Standard.php
上記のロジックを実装します。
<?php
class MyCompany_MyModule_Controller_Varien_Router_Standard extends Mage_Core_Controller_Varien_Router_Standard {
protected function _checkShouldBeSecure($request, $path='') {
parent::_checkShouldBeSecure($request, $path);
if (!$this->_shouldBeSecure($path) && Mage::app()->getStore()->isCurrentlySecure()) {
$url = $this->_getCurrentUnsecureUrl($request);
Mage::app()->getFrontController()->getResponse()
->setRedirect($url)
->sendResponse();
exit;
}
}
protected function _getCurrentUnsecureUrl($request) {
if ($alias = $request->getAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS)) {
return Mage::getBaseUrl('link', false).ltrim($alias, '/');
}
return Mage::getBaseUrl('link', false).ltrim($request->getPathInfo(), '/');
}
}
残念ながら、問題を修正したことを観察するイベントはありませんでした...しかし、ルーターをオーバーライドすることは、(技術的に) 置き換えるよりも (更新のために) 優れています。