Cambio de sitio de Magento .htaccess

He intentado durante varias horas obtener una tienda diferente para mostrarla en un subdirectorio. Nuestro sitio de preparación configurado para Magento es para tiendas Rest of the World, EE. UU., Reino Unido y Australia con varias diferencias entre ellas. Hemos tenido estos trabajando por variables ambientales establecidas en .htaccess (usaré la base y la tienda australiana solo por brevedad), que luego se usarán en el archivo index.php para cargar la tienda correcta.

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 

Ahora me han asignado la tarea de cambiar esto para usar subdirectorios, por lo que staging.hostname.com/au/ y todo lo que pongo no funciona.

Cambié la url base para las diferentes tiendas en la configuración para apuntar a staging.hostname.com/au/ para la tienda australiana. Por lo que puedo ver, no está recogiendo mis nuevas líneas de .htaccess de

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

Probé la expresión regular con y sin comillas, y con y sin el comodín nada (. *) Y sin alegría.

Me aseguré de eliminar / comentar también las líneas SetEnvIf Host, ya que de lo contrario, probablemente estaría causando problemas ya que habría establecido la variable de entorno dos veces.

Si dejo la URL anterior apuntando a la tienda (staging-au.hostname.com), Magento redirecciona a la URL base de la tienda de staging.hostname.com/au (de modo que eso significa que la vieja información de .htaccess funciona), pero luego vuelve a los valores de la tienda base y me da un error 404.

Cualquier ayuda sería muy apreciada.

Apache versión 2.2.21 si eso ayuda.

Esto dependerá de cómo haya configurado los EE. UU., El Reino Unido, etc. Suponiendo que estén configurados como tiendas, simplemente debería poder habilitar Sistema> Configuración> Web> Opciones de URL> Agregar código de tienda a Urls, y no tener que perder el tiempo. con su request_uri vía .htaccess.

En algunos servidores, la directiva SetEnvIf no se reconoce en el archivo .htaccess.

Las variables de entorno también son un poco divertidas cuando se trata de redirecciones en .htaccess, especialmente cuando se tienen redireccionamientos en archivos .htaccess que se ejecutan en subdirectorios.

Apache cambiará el nombre de la variable de entorno al agregar “REDIRECT_” delante de él.

Para que funcione como lo desee, elimine las directivas SetEnvIf y agregue lo siguiente justo debajo de “#RewriteBase / magento /” en el archivo .htaccess raíz de Magento:

 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] 

O simplemente no podría molestarse en tener códigos de tienda explícitos en absoluto. Si usa GEOIP para obtener el código de país de dos letras en su index.php puede tener un simple interruptor / caso / si construir para establecer la variable del código de tienda o el código del sitio web y luego llamar al progtwig principal. Si lo haces de esa manera, entonces no tienes que tener códigos de tienda en la 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"; } 

Tenga en cuenta que necesitará una cookie / dirección IP u otro mecanismo para anular la geo-ip con fines de prueba. No necesitará diferentes URL para las diferentes tiendas o subdirectorios diferentes. Todavía podrá actualizar el tema de cada tienda de forma diferente y tener diferentes monedas en el nivel del sitio web.