2012-11-15 4 views
6

Magento에는 보안 성이 있어야하는 페이지를 요청하면 멋진 기능이 내장되어 있습니다. http를 통해 결제 한 다음 https로 리디렉션합니다. 그러나 누군가가 안전 할 필요가없는 페이지를 요청하면 부족한 것처럼 보입니다. https를 통해 카테고리 페이지를 열면 http로 리디렉션하는 기능이없는 것 같습니다.안전하지 않은 마젠타 색 페이지의 https를 http로 리디렉션

누군가가 요청 그래서 경우 :

https://www.mysite.com/mycategory

들이 301

http://www.mysite.com/mycategory

누구로 리디렉션이를 달성하기 위해 관리하는거야?

그렇다면 누군가가 HTTPS로 리디렉션하는 magento 코어 코드의 방향으로 나를 가리킬 수 있으며 그런 다음 솔루션에서이를 해결할 수 있어야합니다.

답변

7

다음의 방법에 봐

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

건배 그냥 발견했다. –

6

그래서 리치 덕분에 내가

) (/ 마법사/컨트롤러/Varien/라우터/Standard.php :: _ checkShouldBeSecure 응용 프로그램/코드/핵심이 아래로 추적

제가

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; 
    } 
} 

다음이를 추가 ELSEIF 부분에 추가 (로컬/추가가이를 수정 앱/코드 생성 부)이 함수를 수정 함수

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

위의 힌트를 주셔서 감사합니다. 코어에 과부하가 걸리지 않고 코드를 "Magento-like-module"에 통합했습니다. app/etc/modules/MyCompany_MyModule.xml에서

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/code/local/MyCompany/MyModule/etc/config.xml에서

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MyCompany_MyModule> 
      <active>true</active> 
      <codePool>local</codePool> 
     </MyCompany_MyModule> 
    </modules> 
</config> 

를 붙여 라우터 - 구성 :

작성에만 세 개의 파일이 있습니다

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

불행하게도이 문제를 해결하는 관찰 할 이벤트는 없었다 ...하지만 라우터를 무시하는 것은 (기술적으로) 교체보다는 (업데이트) 좋습니다. 추가 지식을 어떻게 정의 모듈 프론트 엔드 URL의 문제를 해결하는

확인 다음을 통해 이동하시기 바랍니다 들어

1

은 https를 강제한다. http 대신. 모듈 작성자를 사용하여 모듈을 작성한 경우. 당신은 definetly config 아래 코드를 찾을 것입니다.응용 프로그램/코드/(codepool)/(이름 공간)/(MODULENAME)/기타 : XML

<admin> 
     <routers> 
     <[ModuleName]> 
      <use>admin</use> 
      <args> 
       <module>[NameSpace_ModuleName]</module> 
       <frontName>[frontName]</frontName> 
      </args> 
     </[ModuleName]> 
    </routers> 
</admin> 

은 http가 아닌 https로 리디렉션의 문제를 해결하려면, 당신은 모듈 config.xml 파일 경로에서 코드 위에 언급 할 필요가 /config.xml 또는 다른 "frontName"을 라우터 및 라우터에 추가 할 수 있습니다. 예 : 위의 코드 관리 URL 당으로

<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> 

http://yourdomain.com/index.php/frontName/adminhtml_moduleName/되며 같은 프론트 엔드의 URL은 다음과 같습니다 나는 내용 위에 당신에게 유용 희망 http://yourdomain.com/index.php/frontName1

.

1

위의 코드는 요청에서 쿼리 문자열을 제거하고 두 기능을 모두 변경하여 리디렉션 전에 요청에 추가해야합니다.

은 아래를 참조하십시오 : 풍부한

$querystring = $_SERVER['QUERY_STRING']; 

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