2

我有2个网站。假设网站 A 和 B。两者都使用 Magento。

B 中几乎所有的产品也都内置在 A 中。

网站 B 将被关闭,因此其所有匹配的产品将被重定向到网站 A。对于其他页面(不匹配的产品和其他 url)将被重定向到 A 的主页。

我创建了将匹配产品从 B 映射到 A 的脚本(将其放在名称 mapping.txt 下),它包含大约 20000 个 url。

为了进行重定向,我使用了 nginx HttpMapModule (http://wiki.nginx.org/HttpMapModule)

我可以通过使用这个conf来映射它:

map $uri $new{
    default http://www.a.com/?ref=b;
    include /some/path/mapping.txt;
}

server {
    listen 80 ;
    listen 443 ssl;
    server_name www.b.com;
    root /some/path/www/b;

    #redirect b
    rewrite ^ $new redirect;

    location / {
        index index.html index.php;
        try_files $uri $uri/ @handler;
        expires 30d;
    }
    .
    .
    .
}

问题是,我希望能够访问 B 的管理页面。由于默认地图,我无法再访问http://www.b.com/admin

然后,我更改了conf:

map $uri $new{
    default http://www.a.com/?ref=b;
    include /some/path/mapping.txt;
}

server {
    listen 80 ;
    listen 443 ssl;
    server_name www.b.com;
    root /some/path/www/b;

    location / {
        #redirect b
        rewrite ^ $new redirect;
        index index.html index.php;
        try_files $uri $uri/ @handler;
        expires 30d;
    }
    .
    .
    .
}

通过这个配置,我仍然无法访问http://www.b.com/admin,但我可以访问http://www.b.com/index.php/admin,但 css 和 js 没有加载,因为请求(http://www.b.com/skin/.....并被http://www.b.com/js/.....重定向到http://www.a.com/?ref=b

但是这个conf也有问题,如果我输入它不会重定向到A的主页http://www.b.com/index.php/customer/account/login

mapping.txt 的示例内容:

/product-abc.html http://www.a.com/product-abc12.html;
/category-a/product-xyz.html http://www.a.com/product-xyz.html;
/category-b/category-d/product-123.html http://www.a.com/category-e/product-12z.html;
4

1 回答 1

0

对于这些一般情况,您可以在 .htaccess 上使用简单的域重定向...

RewriteCond %{HTTP_HOST} ^www.a.com$ [NC]
RewriteRule ^(.*)$ http://www.b.com/$1 [R=301,L]
于 2013-01-09T18:47:07.603 回答