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

The*_*Kid 11 php nginx url-rewriting opencart

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

我在管理员中有两个商店

http://www.shop.com (default)
http://m.shop.com
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我正在使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jav*_*der 8

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

来自XenForo论坛上nginx上的设置SEO完全友好URL:

它实际上非常简单.

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

location /community/ {
            index  index.php index.html index.htm;
            try_files  $uri $uri/ /community/index.php?$uri&$args;
        }
Run Code Online (Sandbox Code Playgroud)

当你在它时,你可能还想添加它来阻止外部访问文件夹"internal_data"和"library".

location ~ ^/community/(internal_data|library)/(.*)$ {
            internal;
        }
Run Code Online (Sandbox Code Playgroud)

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

从直接向前轻松的多店设置说明?在Opencart论坛上:

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

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

希望有道理.


M1t*_*1th 0

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

这会起作用(示例)

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;
Run Code Online (Sandbox Code Playgroud)

这是行不通的:

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

这将使它发挥作用

m.shop.com.vhost

    location / {

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

}
Run Code Online (Sandbox Code Playgroud)

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

我的猜测是你希望它能够工作,这样你就可以自动将标题从 www 更改为 m 并将 m 更改为 www 以用于电话,以便更容易的重定向类..如果是这种情况,那么我希望听到其他拥有此功能的人的意见完毕。我们在 2 台负载平衡服务器上使用 NGINX,并为我们公司的商店使用 Magento、OpenCart 和另一个脚本。我们喜欢您是在 OpenCart 上进行大量交易的认真公司之一 - 我们有一个专门的团队处理其中的国际订单和语言查询。