2012-11-15 15 views
6

Magento ma kilka świetnych wbudowanych funkcji, które jeśli zażądasz strony, która powinna być bezpieczna, np. kasę przez http, a następnie przekierowuje do https. Jednak wydaje się, że brakuje czegoś, jeśli ktoś prosi o stronę, która nie musi być bezpieczna, np. strona kategorii za pośrednictwem protokołu HTTPS nie wydaje się być funkcją przekierowania ich do http.Przekierowanie https na http na niezabezpieczonych stronach magento

Więc jeśli ktoś prosi:

https://www.mysite.com/mycategory

dostają 301 przekierowany do

http://www.mysite.com/mycategory

Ktoś udało się to osiągnąć?

Jeśli nie, to ktoś może wskazać mi kierunek kodu magento, który wykonuje przekierowanie do HTTPS, a następnie powinienem móc z niego pracować, aby wymyślić rozwiązanie.

Odpowiedz

7

Spójrz na następującą metodą

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

Cheers bogate prostu okazało się, że. –

6

Więc dzięki bogatemu i śledzone to w app/code/core/Mage/Controller/Varien/Router/Standard.php :: _ checkShouldBeSecure()

I wprowadza tę funkcję (utworzoną kopię w app/code/local dodatek wprowadza go tam) dodanie w instrukcji elseif wartość części

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

następnie dodanych w tym funkcja

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

Dziękuję bardzo za podpowiedź powyżej. Zintegrowałem kod w "module podobnym do Magento" bez przeciążania Rdzenia.

Istnieją tylko trzy pliki, aby utworzyć:

app/code/local/MyCompany/MyModule/Controller/Varien/Router/Standard.php 
app/code/local/MyCompany/MyModule/etc/config.xml 
app/etc/modules/MyCompany_MyModule.xml 

W app/etc/modules/MyCompany_MyModule.xml wklej następujący nieciekawe rzeczy:

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

W app/code/local/MyCompany/MyModule/etc/config.xml wklej router konfiguracja:

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

I w app/code/local/MyCompany/MyModule/Controller/Varien/Router/Standard.php zaimplementuj logikę z powyżej:

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

Niestety nie było obserwować wydarzenie, które stały problem ... Ale nadrzędne router jest lepsza (aktualizacje) niż (technicznie) zastępując.

1

Dla dodatkowej wiedzy przejdź przez następujące

Sprawdź jak rozwiązać kwestię module frontend niestandardowy adres URL jest zmuszony do https. zamiast http. Jeśli korzystasz z modułu do tworzenia modułu. Niż na pewno znajdziesz poniżej kod w config.xml

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

Aby rozwiązać problem z przekierowaniem do https zamiast http, trzeba komentować powyżej kod z modułu ścieżka pliku config.xml: app/code/(codepool)/(namespace)/(ModuleName)/etc /config.xml LUB możesz dodać różne "frontName" dla i routerów. Np .:

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

Zgodnie z powyższym kodem administratora url będzie http://yourdomain.com/index.php/frontName/adminhtml_moduleName/ i frontend url będzie jak: http://yourdomain.com/index.php/frontName1

Mam nadzieję, że powyższe treści jest przydatna.

1

Powyższy kod usuwa ciąg zapytania z żądania, obie funkcje powinny zostać zmienione, aby dodać je do żądania przed przekierowaniem.

Patrz poniżej:

$querystring = $_SERVER['QUERY_STRING']; 

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