2012-11-15 11 views
6

Magento कार्यक्षमता में कुछ बेहतरीन बनाया गया है कि यदि आप किसी ऐसे पृष्ठ का अनुरोध करते हैं जो सुरक्षित होना चाहिए उदा। http के माध्यम से चेकआउट फिर यह https पर रीडायरेक्ट करता है। हालांकि क्या कमी की प्रतीत होती है कि अगर कोई ऐसे पृष्ठ का अनुरोध करता है जिसे सुरक्षित होने की आवश्यकता नहीं है उदा। https के माध्यम से एक श्रेणी पृष्ठ तो उन्हें http पर रीडायरेक्ट करने की कार्यक्षमता प्रतीत नहीं होती है।गैर सुरक्षित Magento पृष्ठों पर http से http को रीडायरेक्ट करें

तो अगर किसी को अनुरोध करता है:

https://www.mysite.com/mycategory

वे 301 से

http://www.mysite.com/mycategory

किसी रीडायरेक्ट इस लक्ष्य को हासिल करने में कामयाब रहे?

यदि नहीं तो कोई भी मुझे Magento कोर कोड के बिट की दिशा में इंगित करने में सक्षम बनाता है जो एचटीटीपीएस पर रीडायरेक्ट करता है और फिर मुझे समाधान के साथ आने के लिए काम करने में सक्षम होना चाहिए।

उत्तर

7

निम्न विधि पर एक नजर डालें

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

चीयर्स अमीर सिर्फ इतना है कि पाया। –

6

तो रिच करने के लिए धन्यवाद मैं इस नीचे एप्लिकेशन/कोड/कोर/दाना/नियंत्रक/Varien/रूटर/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(), '/'); 
} 
4

उपरोक्त संकेत के लिए बहुत बहुत धन्यवाद। मैंने कोर को अधिभारित किए बिना "Magento-like-module" में कोड एकीकृत किया।

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 में पेस्ट रूटर-विन्यास:

बनाने के लिए केवल तीन फ़ाइलें हैं

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

दुर्भाग्य से निरीक्षण करने के लिए जो समस्या ठीक हो गई किसी भी स्थिति नहीं थी ... लेकिन रूटर अधिभावी बेहतर (अद्यतन के लिए) की तुलना में (तकनीकी) की जगह है।

1

अतिरिक्त ज्ञान कृपया निम्नलिखित

चेक कैसे कस्टम मॉड्यूल दृश्यपटल यूआरएल की समस्या को हल करने के लिए के माध्यम से जाने के लिए https करना पड़ता है। http के बजाय। यदि आपने मॉड्यूल बनाने के लिए मॉड्यूल निर्माता का उपयोग किया है। आप निश्चित रूप से कॉन्फ़िगरेशन में कोड नीचे पाएंगे।एप्लिकेशन/कोड/(codepool)/(नाम स्थान)/(ModuleName)/आदि: एक्सएमएल

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

https http के बजाय करने के लिए पुनर्निर्देशन के समस्या को हल करने के लिए, आप मॉड्यूल config.xml फ़ाइल पथ से कोड ऊपर टिप्पणी करने की जरूरत है /config.xml या आप और राउटर के लिए अलग "फ्रंटनाम" जोड़ सकते हैं। उदाहरण के लिए .:

<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/ हो जाएगा और दृश्यपटल यूआरएल हो जाएगा की तरह: http://yourdomain.com/index.php/frontName1

मुझे आशा है कि सामग्री के ऊपर आप के लिए उपयोगी है।

1

उपरोक्त कोड अनुरोध से क्वेरी स्ट्रिंग को स्ट्रिप्स करता है, दोनों कार्यों को रीडायरेक्ट से पहले अनुरोध में जोड़ने के लिए बदला जाना चाहिए।

नीचे देखें:

$querystring = $_SERVER['QUERY_STRING']; 

return Mage::getBaseUrl('link', false).ltrim($request->getPathInfo(), '/').($querystring ? '?'.$querystring : ''); 
संबंधित मुद्दे