在不安全的magento页面上将https重定向到http

在不安全的magento页面上将https重定向到http,magento,Magento,Magento有一些很棒的内置功能,如果您请求一个应该是安全的页面,例如通过http的签出,那么它会重定向到https。然而,似乎缺少的是,如果有人请求不需要安全的页面,例如通过https的类别页面,则似乎没有将其重定向到http的功能 因此,如果有人要求: 他们被重定向到301 有人做到了吗 如果没有,那么任何人都可以向我指出magento核心代码中重定向到HTTPS的部分的方向,然后我应该能够从中找到解决方案。看看下面的方法 app/code/core/Mage/Core/Control

Magento有一些很棒的内置功能,如果您请求一个应该是安全的页面,例如通过http的签出,那么它会重定向到https。然而,似乎缺少的是,如果有人请求不需要安全的页面,例如通过https的类别页面,则似乎没有将其重定向到http的功能

因此,如果有人要求:

他们被重定向到301

有人做到了吗


如果没有,那么任何人都可以向我指出magento核心代码中重定向到HTTPS的部分的方向,然后我应该能够从中找到解决方案。

看看下面的方法

app/code/core/Mage/Core/Controller/Varien/Router/Standard.php::_checkShouldBeSecure()

多亏了Rich,我在app/code/core/Mage/Controller/Varien/Router/Standard.php中找到了这一点::_checkShouldBeSecure()

我修改了这个函数(在app/code/local中创建了副本并在那里修改了它),添加到了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(), '/');
}

非常感谢上面的提示。我将代码集成到一个“Magento-like模块”中,而不会使内核过载

只有三个文件要创建:

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\u 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/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(), '/');
    }
}

有关更多知识,请阅读以下内容

检查如何解决自定义模块前端url强制为https的问题。而不是http。如果您已使用模块创建者创建模块。您将在config.xml中找到下面的代码

<admin>
       <routers>
         <[ModuleName]>
            <use>admin</use>
            <args>
                <module>[NameSpace_ModuleName]</module>
                <frontName>[frontName]</frontName>
            </args>
        </[ModuleName]>
    </routers>
</admin>
和前端url将类似于:


我希望以上内容对你有用

上面的代码从请求中删除了查询字符串,在重定向之前,应该更改这两个函数以将其添加到请求中

见下文:

$querystring = $_SERVER['QUERY_STRING'];

return Mage::getBaseUrl('link', false).ltrim($request->getPathInfo(), '/').($querystring ? '?'.$querystring : '');

干杯,里奇刚刚发现了这一点。
<admin>
       <routers>
         <[ModuleName]>
            <use>admin</use>
            <args>
                <module>[NameSpace_ModuleName]</module>
                <frontName>[frontName]</frontName>
            </args>
        </[ModuleName]>
    </routers>
</admin>

<frontend>
       <routers>
         <[ModuleName]>
            <use>standard</use>
            <args>
                <module>[NameSpace_ModuleName]</module>
                <frontName>[frontName1]</frontName>
            </args>
        </[ModuleName]>
    </routers>
</frontend>
$querystring = $_SERVER['QUERY_STRING'];

return Mage::getBaseUrl('link', false).ltrim($request->getPathInfo(), '/').($querystring ? '?'.$querystring : '');