Magento“在主页上存储代码到网址”

时间:2012-05-07 10:20:24

标签: magento mod-rewrite url-rewriting

我启用了“将代码存储到网址”选项(管理员 - >系统 - >配置 - >网络 - >网址选项)。

问题是如果我在没有商店代码的情况下访问我的主页,它就可以了。我的意思是两个例子都有效 http://example.com/ http://example.com/code/ 但是第一个url(没有商店代码)应该使用商店代码重定向到url。我试图在htaccess中重写规则,但没有成功,我尝试了各种各样的可能性。

Magento内置重写规则似乎没有帮助 - 我尝试将“/”重写为“代码”,但结果是“/ code / code”url后缀。

1 个答案:

答案 0 :(得分:4)

可以在Mage_Core_Model_Url_Rewrite::rewrite中找到此行为的原因。没有商店代码的基本URL没有重定向。

下面是一个非常难看的解决方案,但它应该适用于您的情况。只要在请求URI中找不到当前商店代码,它就会重定向到包含商店代码的基本URL:

应用程序/代码/本地/ 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;
        }
    }

}

应用程序/代码/本地/ 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>