6

Magento にはいくつかの優れた機能が組み込まれており、http 経由のチェックアウトなど、安全なページをリクエストすると、https にリダイレクトされます。ただし、セキュリティで保護する必要のないページ (たとえば、https 経由のカテゴリ ページ) を誰かが要求した場合、それらを http にリダイレクトする機能がないように思われます。

したがって、誰かが要求した場合:

https://www.mysite.com/mycategory

彼らは301にリダイレクトされます

http://www.mysite.com/mycategory

これを達成できた人はいますか?

そうでない場合は、HTTPS へのリダイレクトを行う magento コア コードのビットの方向に私を向けることができる人がいれば、そこから解決策を考え出すことができるはずです。

4

5 に答える 5

7

次の方法を見てください

app/code/core/Mage/Core/Controller/Varien/Router/Standard.php::_checkShouldBeSecure()
于 2012-11-15T14:54:15.977 に答える
6

Rich のおかげで、app/code/core/Mage/Controller/Varien/Router/Standard.php::_checkShouldBeSecure() でこれを追跡しました

私はこの関数を修正しました(アプリ/コード/ローカルで作成されたコピーをそこに追加して修正しました)elseif部分に追加しました

protected function _checkShouldBeSecure($request, $path='')
{
    if (!Mage::isInstalled() || $request->getPost()) {
        return;
    }

    if ($this->_shouldBeSecure($path) && !Mage::app()->getStore()->isCurrentlySecure()) {
        $url = $this->_getCurrentSecureUrl($request);

        Mage::app()->getFrontController()->getResponse()
            ->setRedirect($url)
            ->sendResponse();
        exit;
    } elseif (!$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(), '/');
}
于 2012-11-15T15:01:14.780 に答える
4

上記のヒントをどうもありがとう。コアを過負荷にすることなく、コードを「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.xmlRouter-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(), '/');
    }
}

残念ながら、問題を修正したことを観察するイベントはありませんでした...しかし、ルーターをオーバーライドすることは、(技術的に) 置き換えるよりも (更新のために) 優れています。

于 2013-05-29T10:25:36.723 に答える