我们在根目录/物理子文件夹/wp中使用了WordPress,并在/products中使用Magento。
我们希望使用子文件夹(例如domain.com/en)使网站支持多语言。
问题在于Magento会在URL后附加存储代码(语言),因此我们有以下URL结构:
当然,我们希望
现在只需要一些重写规则就可以很容易地使它工作。
在_updatePathUseStoreView函数中,似乎并未处理所有链接。
总的来说,这似乎是一个糟糕的解决方案,另一个想法是使用Apache mod_substitute,但这也是一种不好的做法,并且会增加负担。
另一个选择是将两个应用程序都放在根目录中,并使用某些查找逻辑来确定哪个URL属于哪个应用程序。
有没有一种只使用Nginx/Apache的设置的想法,既可以保持唯一的URL,又不需要正则表达式内容。
这是我在根目录中的.htaccess文件。
在我的情况下,商店代码是“en”等,但语言切换器不起作用,它会访问Magento,但会得到404错误,尽管商店代码肯定已经传递过来。
我们希望使用子文件夹(例如domain.com/en)使网站支持多语言。
问题在于Magento会在URL后附加存储代码(语言),因此我们有以下URL结构:
domain.com/en (wordpress)
domain.com/products/en (magento)
当然,我们希望
domain.com/en
domain.com/en/products
现在只需要一些重写规则就可以很容易地使它工作。
RewriteRule ^(.*)/products/?(.*)$ /products/$1 [L]
但是我们还有一个问题,因为Magento生成的链接为/products/en,可以开始修改这些链接的生成位置,例如:
\Magento\Store\Model\Store
在_updatePathUseStoreView函数中,似乎并未处理所有链接。
总的来说,这似乎是一个糟糕的解决方案,另一个想法是使用Apache mod_substitute,但这也是一种不好的做法,并且会增加负担。
另一个选择是将两个应用程序都放在根目录中,并使用某些查找逻辑来确定哪个URL属于哪个应用程序。
有没有一种只使用Nginx/Apache的设置的想法,既可以保持唯一的URL,又不需要正则表达式内容。
这是我在根目录中的.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>
我想要实现的确切规格如下:
- Wordpress 安装在 /wp 目录下,Magento 安装在 /products 目录下
- 两个站点都使用子目录中的语言代码,以显示为 /en/wordpress-page 和 /en/products/magento-page
尝试1 使用基础链接 URL 输入 /en/products,保持基础 URL 为 /products
由于第一个请求被转发,所以我需要在根目录 .htaccess 文件中这样设置 setEnv 参数:
RewriteCond %{REQUEST_URI} ^/(.*)/products
RewriteRule ^(.*)$ /products/index.php [E=MAGE_RUN_CODE:%1] [L]
然后在 /products/.htaccess 文件中:
RewriteCond "%{ENV:REDIRECT_MAGE_RUN_CODE}"
RewriteRule .* - [E=MAGE_RUN_CODE:%{ENV:REDIRECT_MAGE_RUN_CODE}] [L]
我通过执行以下代码来检查index.php中的代码是否正常:
echo getenv('MAGE_RUN_CODE');
在我的情况下,商店代码是“en”等,但语言切换器不起作用,它会访问Magento,但会得到404错误,尽管商店代码肯定已经传递过来。