Включение URL-адресов SEO в несколько хранилищ и поддоменов на OpenCart с использованием Nginx

Я пытаюсь получить URL-адреса SEO, работающие в мульти-магазинах в OpenCart.

У меня есть два магазина в admin

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

URL-адреса SEO работают для http://www.shop.com Но они возвращают not_found.tpl(страница 404) для http://m.shop.com

Однако это работает:

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. Это config:

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;
    }
}

Ответ 1

Я получил эту статью и подробности от кого-то, в моей компании SEO и команда маркетинга используют этот инструмент.

Из Настройте SEO-ссылки на nginx на форумах XenForo:

Это действительно действительно просто.

Учитывая, что вы загрузили 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 и включите Full Friendly URL.

Из Простые инструкции Easy Multi-Store Setup? на форумах Opencart:

Краткая версия:
   создать 2 демо-поддомена
   subA.domain.com
   subB.domain.com
   и "укажите" оба поддомена в одну и ту же папку на вашем веб-узле.
   т.е. public_html/магазин
   Установите opencart в первый поддомен, а затем пройдите через администратора и добавьте дополнительный магазин.

Таким образом, у вас будет Shop1 subA.domain.com и Shop2 subB.domain.com, которые работают с тем же кодом.

Надеюсь, что это имеет смысл.

Ответ 2

OpenCart не обрабатывает URL-адреса SEO для мультисервисов. Единственный способ сделать это - вручную добавить URL-адреса в location {} из файла m.shop.vhost

Это будет работать (пример)

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;

}

Вам просто нужно вручную добавить все URL-адреса SEO, которые вы хотите. Для ссылок на продукты потребуется глобальная интеллектуальная перезапись, поскольку, конечно, их нельзя вручную добавить. Если я могу что-то предложить - если это мобильный сайт, тогда вам действительно не нужны URL-адреса SEO. Пользователи вряд ли используют их для телефонов, уверенный, что пользователь с уверенностью оценит дружественные ссылки для SEO, но использование строки PHP и параметров и запросов может быть лучше для использования на телефоне - единственный недостаток - это требует передового перенаправления.

Я предполагаю, что вы хотите, чтобы это работало так, что вы можете автоматически просто изменить заголовок с www на m и m на www для телефона, так что это класс перенаправления. Если это так, я хотел бы услышать от кого-то еще кто это сделал. Мы используем NGINX на двух серверах с балансировкой нагрузки и используем Magento, OpenCart и еще один script для наших магазинов. Нам нравится, что вы являетесь одной из серьезных компаний, занимающихся транзакциями большого объема на OpenCart - у нас есть специальная команда, обрабатывающая международные заказы и языковые запросы внутри нее.