php - Magento 站点切换.htaccess

标签 php apache .htaccess magento

我已经尝试了几个小时来根据子目录显示不同的商店。我们为 Magento 设置的暂存站点适用于世界其他地区、美国、英国和澳大利亚的商店,它们之间存在各种差异。我们已经通过在 .htaccess 中设置环境变量来完成这些工作(为了简洁起见,我将使用基本商店和澳大利亚商店),然后在 index.php 文件中使用它们来加载正确的商店。

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/以及我放入的任何内容都不起作用。

我已将配置中不同商店的基本 URL 更改为指向澳大利亚商店的 staging.hostname.com/au/。据我所见,它没有接收到我的新 .htaccess 行

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

我已经尝试过带引号和不带引号的正则表达式,带通配符和不带通配符的任何东西 (.*),但都没有成功。

我也确保删除/注释掉 SetEnvIf Host 行,否则它可能会导致问题,因为我设置了两次环境变量。

如果我让旧的 url 指向商店 (staging-au.hostname.com),那么 Magento 会重定向到商店的基本 URL staging.hostname.com/au(这意味着旧的 .htaccess 信息有效),但随后它默认返回基本存储值并给我一个 404 错误。

如有任何帮助,我们将不胜感激。

Apache 版本 2.2.21 如果有帮助。

最佳答案

在某些服务器上,SetEnvIf 指令无法在 .htaccess 文件中识别。

在处理 .htaccess 中的重定向时,环境变量的作用也有点滑稽,尤其是当您在子目录中运行的 .htaccess 文件中有重定向时。

Apache 实际上会通过在其前面添加“REDIRECT_”来重命名环境变量。

为了让它像你想要的那样工作,删除 SetEnvIf 指令并在 Magento 的根 .htaccess 文件中的“#RewriteBase/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]

关于php - Magento 站点切换.htaccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754089/

相关文章:

php - 在不生成 PHP 通知的情况下访问未知数组元素的最佳方法是什么?

php - 无法添加或更新子行,外键约束失败

apache - 基本虚拟主机配置 + 特定于域的自定义

php - laravel 5.1 - 从 2 表中检索数据并使用 foreach 将其发送到索引页

php - 从数据库中检索数据并统计数据出现的次数

java - 从 map 获取 key 中的类型不匹配:预期的org.apache.hadoop.io.Text,收到org.apache.hadoop.io.LongWritable错误

php - Easyphp & SwiftMailer 4.3 无法发送消息 (PHP/SWIFT)

php - 如何编辑 .htaccess 以删除 .php

php - 使用 .htaccess 向 googleverifcation 文件添加异常(exception)

php - SEO 友好 URL 无效