기본값을 제외한 모든 상점보기의 URL에 상점 코드


10

시스템 > 구성 > > URL에 상점 코드 추가를 활성화 하고 캐나다 (/ ca /)에 대한 새로운 상점보기를 설정했습니다.

이상적으로 example.com/ca/를로드하여 캐나다 상점보기를로드하고 싶지만 default기본 상점에 대해 상점 코드가 없는 example.com이 여전히 있습니다 .

홈 페이지가 이와 관련하여 잘 작동한다는 것을 알았지 만 제품 페이지로 이동하면 Magento가 자동으로 URL에 상점 코드를 포함시킵니다.

기본 저장소의 현재 URL을 변경하는 것을 주저하는 주된 이유는 링크 주스가 손실되는 것을 싫어하기 때문입니다. 이론적으로 301 리디렉션을 설정하면 괜찮을 것이지만 소량의 주스가 여전히 손실되는 곳을 읽은 것으로 생각합니다.

또한, 나는 이것이 유용성 관점에서 다소 더 낫다고 생각합니다. 대부분의 트래픽이 기본 저장소에 있고 고객이 일반 URL에 익숙한 경우 URL의 추가 /default/( /us/또는 기타)로 고객을 괴롭 힙니다 .

URL에 상점 코드 추가를 비활성화 하고 캐나다 상점보기의 기본 URL을 example.com/ca/로 변경 하려고 시도했지만 아무 것도 수행하지 않는 것 같습니다. URL에서 상점 코드를 가져 와서 아무것도하지 않기 위해서는 활성화 된 설정이 필요하다고 가정합니다.

답변:


9

URL에 상점 코드 추가를 사용하여 기뻐하지 않았습니다 . 주된 이유는 동일한 언어를 사용하여 여러 상점보기를 가질 수 없었기 때문입니다 (내 질문 참조 ). 그 외에도 URL로 인해 잘못된 상점보기 코드를 사용해야하는 것을 좋아하지 않았습니다.

자주 권장되는 "하위 폴더 만들기 및 심볼릭 링크 만들기"팁을 사용하여 작은 테스트를 수행했는데 작동 할 수 있습니다. 당신이 그것을 좋아하는지 확인하십시오.

  • 하위 폴더 만들기 / ca /
  • 하위 폴더 내부에 대한 심볼릭 링크 만들기
    • ../앱
    • ../ 오류
    • ../ 포함
    • ../index.php
    • ../js
    • ../lib
    • ../미디어
    • ../피부
    • ../var
    • (원한다면 / 다른 디렉토리를 추가하십시오)
  • / ca /에 대한 vHost 구성을 편집하거나 / ca /에 .htaccess를 복사하여 편집하십시오.

    • 다시 쓰기 기준을 설정하십시오.

      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 알림을 잃어 버리고 읽지 않은 것으로 표시하기가 어렵습니다. 대답을 수락 한 것으로 영원히 표시하려면 앞으로 트위터에 저를 ping하십시오! 적어도 트위터를 사용하면 트윗으로 돌아와서 다시 돌아 오는 것을 기억할 수 있습니다. 도움을 주셔서 다시 한 번 죄송합니다. 좋은 대답입니다!
kalenjordan

걱정 마! 도와 드리겠습니다.
Matthias Zeis 14

2
좋은 조언! 가능한 두 가지 단순화 : 1) 서브 디렉토리에 대해 별도의 vHost 구성 또는 .htaccess 파일을 작성하므로 조건없이 상점보기를 간단하게 초기화 할 수 있습니다 SetEnv MAGE_STORE_VIEW ca. RewriteBase반면에 일반적으로 필요하지 않습니다. 2) Base Link URL 만 / ca /로 설정 하고 기본 Base URL 구성을 그대로


1

mzeisfschmengler 's comment답변을 바탕으로 KISS가 수행하는 방법은 다음과 같습니다.

  1. 서브 디렉토리를 작성하십시오 ca.mkdir ca
  2. app디렉토리에 대한 심볼릭 링크를 만듭니다 .ln -s ../app/ ca/app
  3. index.php파일에 대한 심볼릭 링크를 만듭니다 :ln -s ../index.php/ ca/index.php
  4. 다음 내용으로 디렉토리에 .htaccess파일을 작성하십시오 .catouch 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

다른 옵션은 상점 당 서브 도메인을 사용하는 것입니다. 그런 다음 magento에게 사용할 "웹 사이트 / 저장소"를 알려주도록 Apache를 설정하면됩니다.

이런 식으로 하위 도메인 웹 사이트에 모두 동일한 magento intall의 여러 "저장소"및 "보기"를 가질 수 있습니다.

  • 설정은 시스템> 구성> 일반 / 웹에 있습니다.
  • 안전하지 않습니다. 기본 URL
  • 보안. 기본 URL
  • 쿠키 . 도메인

이것은 example.com store 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

이것을 app.code / local 모듈의 system.xml 파일 중 하나에 추가하십시오.

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

이 방법으로 상점보기마다 "URL에 상점 코드 추가"옵션을 선택할 수 있습니다.


선택할 수 있습니다. 그러나 실제로 작동합니까?
Fabian Schmengler

예, 테스트 젠토 1.9.x 및 젠토 EE 1.13.x
nverhoye

이것이 실제로 작동하면 좋았지 만 하나의 웹 사이트와 여러 개의 상점보기가있는 환경 에서이 작업을 수행 할 수 없었습니다. CE 1.9.2.3에서 테스트되었습니다.
Aad Mathijssen

나를 위해 일하지
Visakh B Sujathan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.