TL;医生
我在www.example.com
我在www.example.com/wordpress
我需要以下网址同时提供相同的wordpress内容;
www.example.com/eu/wordpress
www.example.com/gb/wordpress
P.S。:我知道这有重复的内容问题,请忽略
问题是:最好的方法是什么?
完整故事
我有一个使用2 digit language code subdirectory technique的Magento多商店网站。
我在其自己的子目录中安装了一个Wordpress。
app
downloader
errors
eu/ - symlinks for the € Euro store
gb/ - symlinks for the £ UK store
includes
js
lib
media
shell
wordpress/ - The Wordpress install
var
我需要所有商店都提供Wordpress博客,以便用户使用他们的区域设置/货币留在商店中。
我尝试过什么
使用这些堆栈中的答案;
htaccess multi language site with sub directories, and default 301
Endless Redirect Loop by htaccess rules multi language
我做过尝试但不幸的是我对.htaccess和vhosts问题感到很糟糕
通过vhosts文件
<VirtualHost *:80>
ServerName www.example.com/eu/wordpress/
ServerAlias www.example.com/wordpress/
DocumentRoot /var/www/vhosts/www.example.com/public/wordpress
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com/gb/wordpress/
ServerAlias www.example.com/wordpress/
DocumentRoot /var/www/vhosts/www.example.com/public/wordpress
</VirtualHost>
通过Wordpress htaccess
RewriteCond %{REQUEST_URI} !^/(eu|gb )/wordpress(/|$) [NC]
RewriteRule ^(.*)$ wordpress/$1 [R=301,L]
通过Magento .htaccess
RewriteCond %{REQUEST_URI} ^/eu/wordpress/(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/gb/wordpress/(.*)$ [OR]
RewriteRule ^/wordpress/.*$ - [L]
答案 0 :(得分:2)
首先,你不需要vhosts用于wordpress,每个域和/或子域只需要一个vhost。你的vhost看起来应该是这样的(我假设你的magento商店已经有类似的vhost):
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/vhosts/www.example.com/public
<Directory "/var/www/vhosts/www.example.com/public">
# allow .htaccess files to override all directives
AllowOverride All
</Directory>
</VirtualHost>
现在,您只需要修改magento的 .htaccess (/ var / www / vhosts / www.example.com / public / .htaccess),并添加以下规则:
<IfModule mod_rewrite.c>
RewriteEngine on
# rewrite rule to redirect
# eu/wordpress -> /wordpress/
# eu/wordpress/ -> /wordpress/
# gb/wordpress -> /wordpress/
# gb/wordpress/ -> /wordpress/
RewriteRule ^(eu|gb)/wordpress/?$ /wordpress/ [R=301,NC,L]
# ... continue here with magento's rewrite rules ...
</IfModule>
答案 1 :(得分:0)
我们正在制作中,希望这个答案在某些方面可能对某些人有帮助。
我们这样做的方法是添加一个RUN_CODE环境变量,该变量在自定义Wordpress过滤器中用于获取所有工作的URL。我已经使用了&#39; eu&#39;我的问题的例子来说明如下。请注意,我们必须为Apache和Nginx执行此操作,因此我已为两者添加了.htaccess和服务器块。
APACHE - .htaccess
在eu
country stub子目录中,将其添加到.htaccess文件中(so eu / .htaccess)
RewriteCond %{REQUEST_URI} ^/eu/wordpress$
RewriteRule ^(.*)$ /eu/wordpress/ [R=301]
RewriteCond %{REQUEST_URI} ^/eu/wordpress(.*)$
RewriteRule ^(.*)$ /wordpress/index.php/$1 [L,E=RUN_CODE:eu]
NGINX - 服务器阻止
location ~* /eu/wordpress(.*) {
if (!-f $request_filename) {
set $code 'eu';
rewrite ^(.*)$ /wordpress/index.php?$1 last;
break;
}
}
在Wordpress根目录index.php
中,这是在文件顶部添加的
$pos = strpos($_SERVER['REQUEST_URI'], '/wordpress');
if ($pos !== 0) {
$_SERVER['REQUEST_URI'] = substr($_SERVER['REQUEST_URI'], $pos);
}
Wordpress主题functions.php
add_filter('post_link', 'link_mcnab');
add_filter('page_link', 'link_mcnab');
add_filter('bloginfo_url', 'link_mcnab');
function link_mcnab($link)
{
if (isset($_SERVER['REDIRECT_RUN_CODE']) && $_SERVER['REDIRECT_RUN_CODE']) {
$homeUrl = home_url();
$domain = substr($homeUrl, 0, strrpos($homeUrl, '/'));
$link = str_replace($domain, $domain . '/' . $_SERVER['REDIRECT_RUN_CODE'], $link);
}
return $link;
}