使用Nginx在OpenCart上的多个商店和子域上启用SEO URL

时间:2013-05-07 17:02:17

标签: php url-rewriting nginx opencart

我试图让SEO URL在OpenCart中的多商店中运行。

我在管理员中有两个商店

http://www.shop.com (default)
http://m.shop.com

SEO网址适用于http://www.shop.com 但是他们为http://m.shop.com

返回了一个not_found.tpl(404页面)

但这有效:

http://m.shop.com/index.php?route=product/product&path=68&product_id=52

SEO明智,它应该是

/index.php?route=product/product&path=68&product_id=52

http://www.shop.com/product-title
http://m.shop.com/product-title (404 returned)

我正在使用NGINX。这是配置:

www.shop.com

server {
    server_name  www.shop.com;
    listen 80;
    root /var/www/www.shop.com/;
    index index.php index.html;
    location /image/data {
        autoindex on;
    }
    location / {
        try_files $uri @opencart;       
    }
    location @opencart {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

m.shop.com

server {
    server_name  m.shop.com;
    listen 80;
    root /var/www/www.shop.com/;
    index index.php index.html;
    location /image/data {
        autoindex on;
    }
    location / {
        try_files $uri @opencart;       
    }
    location @opencart {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

2 个答案:

答案 0 :(得分:8)

我从一个人那里得到了这篇文章和细节,在我的公司SEO和营销团队正在使用这个工具..

来自XenForo论坛上的Setup SEO Full Friendly URLs on nginx

  

实际上非常简单。

     

考虑到您已将XenForo上传到目录“community”,只需将其添加到您的nginx配置中:

location /community/ {
            index  index.php index.html index.htm;
            try_files  $uri $uri/ /community/index.php?$uri&$args;
        }
     

当您使用它时,您可能还想添加此项以阻止对“internal_data”和“library”文件夹的外部访问。

location ~ ^/community/(internal_data|library)/(.*)$ {
            internal;
        }
     

重新启动nginx并启用完整友好URL。

来自Opencart论坛上的Straight Forward Easy Instructions for Multi-Store Setup?

  

简短版本是:
     创建2个演示子域
     subA.domain.com
     subB.domain.com
     并将两个子域“指向”Web主机上的同一文件夹      即public_html / shop
     将opencart安装到第一个子域,然后通过管理员添加一个额外的存储。

     

因此,Shop1 subA.domain.com和Shop2 subB.domain.com都运行相同的代码。

希望这是有道理的。

答案 1 :(得分:0)

OpenCart不处理多商店的SEO URL。唯一的方法是执行此操作 - 手动在m.shop.vhost的location {}内添加网址

这将起作用(例子)

www.shop.com.vhost

www.shop.com/index.php?route=checkout/cart
www.shop.com/checkout/cart

rewrite ^/checkout/cart?$ /index.php?route=checkout/cart last;

这不起作用:

m.shop.com/checkout/cart - 它将返回404。

这将使其正常工作

m.shop.com.vhost

    location / {

    rewrite ^/checkout/cart?$ /index.php?route=checkout/cart last;

}

您只需手动添加所需的所有SEO网址即可。产品链接需要进行全局智能重写,因为您无法手动添加它们。如果我可能会建议一些东西 - 如果这是一个移动网站 - 那么你真的不需要SEO网址..用户几乎不会将它们用于手机,确保精明的用户会喜欢友好的SEO链接,但使用PHP字符串和参数和查询可能会更好在手机上使用 - 唯一的缺点是它需要高级重定向。

我的猜测是你希望这个能够正常工作,这样你就可以自动将标题从www更改为m和m更改为www以便手机更方便重定向类...如果是这种情况比我想听别人说的那样谁做到了这一点。我们在2台负载均衡的服务器上使用NGINX,并使用Magento,OpenCart和我们公司商店的另一个脚本。我们希望您是在OpenCart上进行大量交易的重要公司之一 - 我们有专门的团队处理其中的国际订单和语言查询..