2012-01-06 57 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/,不管我把不起作用。

我已將配置中不同商店的基礎網址更改爲指向澳大利亞商店的staging.hostname.com/au/。從我可以看到它不是拿起我的新的.htaccess線

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

我試着和不帶引號的正則表達式,有和沒有任何通配符(*),並沒有喜悅。

我確實刪除/註釋掉了SetEnvIf主機行,否則它可能會導致問題,因爲我設置了兩次環境變量。

如果我將舊url指向商店(staging-au.hostname.com),則Magento將重定向到商店的staging.hostname.com/au基本URL(這意味着舊的.htaccess信息起作用) ,但它然後默認回到基本商店值,並給我一個404錯誤。

任何幫助將不勝感激。

Apache版本2.2.21如果有幫助。

+0

讓您的生活更輕鬆:http://blog.speedupmate.com/post/9992573819/poor-mans-multisite-setup-for-magento – 2012-01-06 07:39:47

回答

2

這將取決於您如何設置美國,英國等。假設它們設置爲商店,您應該只需啓用系統>配置> Web> URL選項>將商店代碼添加到Urls,而不是必須通過.htaccess解決您的request_uri問題。

+0

如果我們想正確,這一套東西是我們應該做的。由於這是對已經發生的一切的最後一刻改變,所以太晚了。 現在我們已經使用子域:) – BenFreke 2012-01-08 01:36:51

1

或者你可能根本就不打擾明確的商店代碼。如果您使用GEOIP在index.php中獲取兩個字母的國家/地區代碼,則可以使用簡單的開關/案例/結構來設置商店代碼變量或網站代碼,然後調用主程序。如果你這樣做,那麼你不必在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"; 
} 

請注意,您需要cookie/ip地址或其他機制來覆蓋地理ip以進行測試。對於不同的商店或任何不同的子目錄,您不需要不同的URL。您仍然可以以不同的方式爲每個商店設定主題,並在網站級別使用不同的貨幣。

+0

這基本上是GeoIP擴展已經做的。但是你的回答讓我意識到我在沒有受到它影響的網站的白名單中......所以我認爲那是我遇到的一半問題。謝謝。 – BenFreke 2012-01-08 01:50:04

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]