除默认值外,每个商店视图的URL中都有商店代码


10

我启用了系统 > 配置 > 网站 > 将商店代码添加到URL,并为加拿大(/ ca /​​)设置了新的商店视图。

理想情况下,我想让example.com/ca/加载加拿大商店视图,但仍将example.com(其中没有default商店代码)用作默认商店。

我注意到主页在这方面工作得很好,但是当我进入产品页面时,Magento会自动在URL中包含商店代码。

我不愿意为默认存储更改当前URL的主要原因是,我不想看到它们失去任何链接。我知道从理论上讲,只要我设置了301重定向,就可以了,但是我想我读过的地方仍然遗漏了少量果汁。

另外,我认为从可用性角度来看,这可能会更好。如果您的大部分流量都流向您的默认商店,并且您的客户习惯了常规URL,那么为什么还要用URL中的其他/default//us/或其他任何东西)打扰他们。

我尝试禁用将商店代码添加到URL并仅将加拿大商店视图的基本URL更改为example.com/ca/,但这似乎没有任何作用。我假设它需要启用该设置才能获取URL中的商店代码并对其进行任何操作。

Answers:


9

我对使用“ 将商店代码添加到URL”感到不满意。主要原因是我们无法使用相同的语言获得多个商店视图(请参阅我的问题)。除此之外,我不希望仅由于URL而不得不使用错误的商店视图代码。

我使用了经常推荐的“创建子文件夹并创建符号链接”技巧进行了一次小型测试,它可能会起作用。请检查您是否喜欢它。

  • 创建一个子文件夹/ ca /
  • 在子文件夹内创建符号链接
    • ../app
    • ../错误
    • ../包括
    • ../index.php
    • ../js
    • ../lib
    • ../媒体
    • ../皮肤
    • ../var
    • (如果需要,请添加其他目录)
  • 编辑/ ca /​​的vHost配置(或将.htaccess复制到/ ca /​​并进行编辑)到

    • 设置重写基础:

      RewriteBase /ca/

    • 根据URL初始化正确的商店视图。有很多方法可以做到这一点,其中一种可能是:

      RewriteCond %{REQUEST_URI} ^/ca/.* [NC,OR]
      RewriteCond %{REQUEST_URI} ^/ca$ [NC]
      RewriteRule .* - [E=MAGE_RUN_CODE:ca]
      RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
      RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:store]`

它为我工作:

创建文件夹和符号链接并不有趣,但是至少您不必编辑核心文件。


2
您只需为媒体,js和皮肤建立符号链接,然后将Mage类路径编辑为../app/Mage.php。据我所知,这应该足够了
Sander Mangel

2
是的,如果您要编辑核心文件。
Matthias Zeis

@MatthiasZeis很抱歉接受这么长时间!有时我会丢失SE通知的记录,很难将它们标记为未读。如果以后我永远花时间将答案标记为接受,请随时在Twitter上对我进行ping操作!至少使用twitter,您可以收藏一条tweet,以便记住要重新使用它。抱歉,再次感谢您的帮助!好答案!
kalenjordan 2014年

别担心!很高兴可以为您服务。
Matthias Zeis 2014年

2
很好的建议!两种可能的简化:1)既然你创建独立的虚拟主机配置或子目录.htaccess文件,可以初始化无条件商店观点直截了当:SetEnv MAGE_STORE_VIEW caRewriteBase另一方面,通常没有必要。2)如果仅将基本链接URL设置为/ ca /​​,并保留默认的基本URL配置,则将符号链接设置为index.php和应用程序就足够了
Fabian Schmengler 2014年


1

根据mzeisfschmengler的评论,下面是一种KISS的实现方法:

  1. 创建一个子目录camkdir ca
  2. 创建指向app目录的符号链接:ln -s ../app/ ca/app
  3. 创建一个指向index.php文件的符号链接:ln -s ../index.php/ ca/index.php
  4. .htaccessca目录中创建一个文件:touch ca/.htaccess具有以下内容:

    SetEnv MAGE_RUN_CODE ca
    
    RewriteEngine On
    RewriteBase /en/
    
    # solves the issue that the environment variable MAGE_RUN_CODE is only available as REDIRECT_MAGE_RUN_CODE
    # see http://stackoverflow.com/a/10128290/719023 for details
    RewriteOptions inherit
  5. 在下System > Configuration > Web,分别设置Base Link URL{{unsecure_base_url}}ca/{{secure_base_url}}ca/

如果由于某种原因RewriteOptions inherit无法使用该零件,则也可以直接将默认mod_rewrite零件复制到子目录.htaccess文件中。

此解决方案应与mzeis的解决方案一样好,但要小得多且容易得多。


0

另一种选择是每个商店使用一个子域。然后,您只需设置Apache即可告诉magento使用哪个“网站/商店”。

这样,您可以在同一magento内的子域网站下拥有多个“商店”和“视图”。

  • 设置位于系统>配置>常规/ Web中
  • 不安全 。基本网址
  • 安全。基本网址
  • 曲奇饼 。域

这是example.com商店的Apache配置

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "default"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

这是额外的“ ca”存储Apache配置

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "ca"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

0

Juste将此添加到您的system.xml文件之一(在app / code / local模块中):

<sections>
    <web>
        <groups>
            <url>
                <fields>
                    <use_store>
                        <show_in_store>1</show_in_store>
                    </use_store>
                </fields>
            </url>
        </groups>
    </web>
</sections>

这样,您可以在每个商店视图中选择“将商店代码添加到URL”选项。


您可以选择它。但是您确定它确实有效吗?
Fabian Schmengler 2015年

是的,已在magento 1.9.x和magento EE 1.13.x上进行了测试
nverhoye,2015年

如果可以成功运行,那将是非常不错的选择,但我无法在具有一个网站和多个商店视图的环境中进行这项工作。在CE 1.9.2.3。上测试
Aad Mathijssen '16

对我不
有用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.