Apache两个应用程序一个域共享语言/ en - Magento和Wordpress

Joe*_*vey 5 php apache wordpress nginx magento

我们在root//物理子文件夹/ wp和Magento in/products中有Wordpress.

我们希望使用子文件夹(例如domain.com/en)使网站成为多语言

问题出现了,因为magento在网址之后附加商店代码(语言),所以我们有

domain.com/en (wordpress)
domain.com/products/en (magento)
Run Code Online (Sandbox Code Playgroud)

当然我们想要

domain.com/en
domain.com/en/products
Run Code Online (Sandbox Code Playgroud)

现在,使用一些重写规则很容易

RewriteRule ^(.*)/products/?(.*)$ /products/$1 [L]
Run Code Online (Sandbox Code Playgroud)

但是我们还有一个问题,因为Magento生成链接为/ products/en它可以开始修改这些链接的生成位置,如

\Magento\Store\Model\Store 
Run Code Online (Sandbox Code Playgroud)

在_updatePathUseStoreView函数中,这似乎并不处理所有链接

在一般情况下似乎是一个糟糕的解决方案,另一个想法是使用Apache mod_substitute也似乎不好的做法和开销.

另一种选择是让根目录中的两个应用程序都有一些查找逻辑,以查看哪个url属于哪个应用程序.

任何可以纯粹使用Nginx/Apache的设置的想法.这并不会影响具有唯一网址或正则表达式的内容.

这是我根目录中的.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !^/(.*)/products
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^(/)?$ wp/index.php [L]

RewriteCond %{REQUEST_URI} ^/(.*)/products
RewriteRule ^(.*)$ /products/index.php [L]

</IfModule>
Run Code Online (Sandbox Code Playgroud)

我想要达到的确切规格就是这个.

  • Wordpress安装在/ wp,Magento/products中
  • 通过两个站点上使用的子文件夹显示的语言代码显示为/ en/wordpress-page/en/products/magento-page

尝试1 使用基本链接URL输入/ en/products并将基本URL保留为/ products

当第一个请求被转发时,我必须在root .htaccess中像这样工作setEnv

RewriteCond %{REQUEST_URI} ^/(.*)/products
RewriteRule ^(.*)$ /products/index.php [E=MAGE_RUN_CODE:%1] [L]
Run Code Online (Sandbox Code Playgroud)

然后在/products/.htaccess中

RewriteCond "%{ENV:REDIRECT_MAGE_RUN_CODE}"
RewriteRule .* - [E=MAGE_RUN_CODE:%{ENV:REDIRECT_MAGE_RUN_CODE}] [L]
Run Code Online (Sandbox Code Playgroud)

我检查了代码是通过index.php来完成的

 echo getenv('MAGE_RUN_CODE');
Run Code Online (Sandbox Code Playgroud)

在我的情况下,商店代码是"en"等..但语言切换器不起作用它击中Magento但得到404甚至认为商店代码肯定是通过.

小智 1

您只需要从后台进行一些配置。

系统 => 配置 => 常规 => Web => URL 选项

将商店代码添加到 URL

系统 => 配置 => 常规 => Web => 不安全

基本链接 URL http://example.com/en/products/

系统 => 配置 => 常规 => Web => 安全

基本链接 URL https://example.com/en/products/

然后,在 htaccess 中添加一条规则来设置正确的商店代码:

SetEnvIf Host .*example.com/en* MAGE_RUN_CODE=en_store SetEnvIf Host .*example.com/fr* MAGE_RUN_CODE=fr_store