2012-01-06 5 views
2

나는 몇 시간 동안 다른 저장소를 하위 디렉토리를 기반으로 표시하려고 노력했습니다. Magento를 위해 준비한 준비 장소는 나머지 지역, 미국, 영국 및 호주 상점을 대상으로합니다. 우리는 .htaccess에서 환경 변수를 설정하여 작업을 수행했습니다 (기본 저장소와 호주 저장소는 간결하게 만 사용합니다). 그런 다음 index.php 파일에서 올바른 저장소를로드하는 데 사용됩니다.Magento 사이트 스위칭 .htaccess

SetEnvIf Host staging\.hostname\.com MAGE_RUN_CODE=base 
SetEnvIf Host staging\.hostname\.com MAGE_RUN_TYPE=store 

SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_CODE=au 
SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_TYPE=website 

내가 지금 너무 staging.hostname.com/au/, 하위 디렉토리를 사용하려면이 변경, 어떤 I가 작동하지 않습니다 넣어 임무를했습니다.

오스트레일리아 점포의 staging.hostname.com/au/를 가리 키도록 구성의 다른 점포에 대한 기본 URL을 변경했습니다. 나는 내가 함께하고 인용 부호없이 정규 표현식을 시도했습니다

SetEnvIf Request_URI "^/au/.*" MAGE_RUN_CODE=au 
SetEnvIf Request_URI "^/au/.*" MAGE_RUN_TYPE=website 

의 나의 새로운 htaccess로 라인을 따기없고, 함께하고 와일드 카드 아무것도없이 (. *)와 기쁨 아니에요 볼 수있는에서.

SetEnvIf 호스트 라인도 삭제/주석 처리 했으므로 환경 변수를 두 번 설정하면 문제가 발생할 수 있습니다.

저장소 (staging-au.hostname.com)를 가리키는 이전 URL을 그대로두면 Magento는 저장소의 기본 URL staging.hostname.com/au로 리디렉션됩니다 (예 : .htaccess 정보가 작동 함을 의미 함) ,하지만 기본 저장 값으로 다시 기본값이 설정되어 404 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

아파치 버전 2.2.21이 도움이 될 경우.

+0

가 당신의 인생을 쉽게 : http://blog.speedupmate.com/post/9992573819/poor-mans-multisite-setup-for-magento –

답변

2

이것은 미국, 영국 등을 어떻게 설정했는지에 따라 다릅니다. 스토어로 설정되었다고 가정하면 시스템> 구성> 웹> URL 옵션> URL에 상점 코드 추가 만 가능하도록 설정하면됩니다. .htaccess를 통해 귀하의 request_uri와 어지럽히 야합니다.

+0

을 우리는 제대로,이 일을 설정하세요 우리가해야 할 일이다. 이것은 이미 일어난 모든 것에 대한 마지막 순간의 변화이기 때문에 너무 늦었습니다. 이제 하위 도메인을 사용했습니다 : – BenFreke

1

아니면 매장 코드를 명시 적으로 사용하지 않아도됩니다. GEOIP을 사용하여 index.php에 두 글자 국가 코드를 얻는 경우 상점 코드 변수 또는 웹 사이트 코드를 설정 한 다음 기본 프로그램을 호출하는 간단한 switch/case/if 구문을 사용할 수 있습니다. 그렇게하면 URL에 상점 코드가 없어도됩니다.

$country=$_SERVER['GEOIP_COUNTRY_CODE']; 
//if (isset($_COOKIE['geocountry'])) $country=$_COOKIE['geocountry']; 

switch ($country) 
{ case "CA": case "MX": case "US": 
$_SERVER['MAGE_RUN_CODE'] = "usd"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "AT": case "BE": case "CY": case "DE": case "ES": case "FI": case "FR": case "GR": case "IE": case "IT": case "LU": case "MT": case "NL": case "SI": 
$_SERVER['MAGE_RUN_CODE'] = "eur"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "BG": case "CZ": case "DK": case "EE": case "HU": case "LV": case "PL": case "RO": case "SE": 
$_SERVER['MAGE_RUN_CODE'] = "eugbp"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
break; 
    case "GB": 
$_SERVER['MAGE_RUN_CODE'] = "gbp"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "AX": 
$_SERVER['MAGE_RUN_CODE'] = "staging"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
break; 
    default: 
$_SERVER['MAGE_RUN_CODE'] = "row"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
} 

참고 테스트 목적으로 지리적 IP를-타고 이상에 쿠키/IP 주소 또는 다른 메커니즘이 필요합니다. 서로 다른 상점 또는 다른 서브 디렉토리에 대해 다른 URL이 필요하지 않습니다. 각 상점을 다르게 주제를 고를 수 있고 웹 사이트 수준에서 다른 통화를 가질 수 있습니다.

+0

이것은 기본적으로 GeoIP 확장 프로그램이 이미 수행하고있는 작업입니다. 그러나 당신의 대답은 제가 영향을받지 않는 사이트의 화이트리스트에 있다는 것을 깨닫게했습니다 ... 그래서 나는 그것이 내가 가진 이슈의 절반이라고 생각합니다. 감사. – BenFreke

2

일부 서버에서는 SetEnvIf 지정 문이 .htaccess 파일에서 인식되지 않습니다.

환경 변수는 .htaccess에서 리디렉션을 처리 할 때 특히 하위 디렉토리에서 실행되는 .htaccess 파일에서 리디렉션이있을 때 약간 재미 있습니다.

Apache는 실제로 "REDIRECT_"를 앞에 추가하여 환경 변수의 이름을 바꿉니다.

원하는대로 작동 시키려면 SetEnvIf 지시문을 제거하고 Magento의 루트에서 "#RewriteBase/magento /"바로 다음에 추가하십시오.htaccess로 파일 :

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