2012-05-07 45 views
1

我有選項「存儲代碼到Urls」打開(管理 - >系統 - >配置 - >網頁 - >網址選項)。Magento「Store Code to Urls」在主頁

問題是,如果我訪問我的主頁沒有商店代碼,它的工作原理。我的意思是這兩個例子的作品: http://example.com/ http://example.com/code/ 但第一個網址(沒有商店代碼)應該重定向到商店代碼的網址。我試圖把重寫規則放在htaccess中,但沒有成功,我嘗試了種種可能性。 Magento構建重寫規則似乎不是有用的 - 我試過重寫「/」到「代碼」,但它的結果是「/ code/code」url後綴。

+0

你有'自動重定向到基本URL'設置爲是? –

+0

是的,但是我的基本URL不包含代碼(它用於目錄路徑,所以我不認爲我應該改變它)。 – Fisher

回答

4

此行爲的原因可以在Mage_Core_Model_Url_Rewrite::rewrite中找到。沒有商店代碼的基本網址沒有重定向。

下面是一個非常不好的解決方案,但它應該適用於您的情況。

應用程序/代碼/本地/ Danslo/RedirectToStore /型號/ Observer.php:

<?php 

class Danslo_RedirectToStore_Model_Observer 
{ 

    public function redirectToStore($observer) 
    { 
     $request = $observer->getFront()->getRequest(); 
     $storeCode = Mage::app()->getStore()->getCode(); 
     $requestUri = $request->getRequestUri(); 

     if (strpos($requestUri, $storeCode) === false) { 
      $targetUrl = $request->getBaseUrl() . '/' . $storeCode; 
      header('HTTP/1.1 301 Moved Permanently'); 
      header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
      header('Pragma: no-cache'); 
      header('Location: ' . $targetUrl); 
      exit; 
     } 
    } 

} 
只要當前存儲器代碼不是在請求URI發現它重定向到基本URL包括商店代碼

應用程序/代碼/本地/ Danslo/RedirectToStore的/ etc/config.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <global> 
     <events> 
      <controller_front_init_before> 
       <observers> 
        <redirect_to_store> 
         <class>Danslo_RedirectToStore_Model_Observer</class> 
         <method>redirectToStore</method> 
         <type>singleton</type> 
        </redirect_to_store> 
       </observers> 
      </controller_front_init_before> 
     </events> 
    </global> 
</config> 

應用的/ etc /模塊/ Danslo_RedirectToStore.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <Danslo_RedirectToStore> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Danslo_RedirectToStore> 
    </modules> 
</config> 
+0

嗯,我寧願不使用大錘來破解堅果,但它的工作如此之大謝謝:) – Fisher

+0

好的答案!我稍微修改了代碼以重定向CMS頁面而沒有存儲前綴:'$ targetUrl = rtrim(Mage :: getBaseUrl(),'/')。 $ requestUri;' –

+0

謝謝,我會嘗試,我遇到了同樣的問題。 – beluga