Prestashop redirects to old domain after changing it in Database

前端 未结 4 1216
天涯浪人
天涯浪人 2021-02-15 16:22

I am trying to create a copy of a prestashop 1.6 e-shop for development purposes from domain.com to dev.domain.com

The process I followed is

  1. Disable cache
4条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-15 17:04

    Your procedure is right, there is only a few factors that may cause your issue

    1. Make sure that there is no manual redirection in your web server configuration (or old .htaccess for Apache)
    2. Change Prestashop domains from the database (detailed below)
    3. Clear all your cache Update Prestashop domains from the database (detailed below)
    4. Always test with a browser in incognito/developer mode, disabling all cached redirections. I personally use an incognito Chrome window, in developer mode
    5. When debugging, it is a good idea to inspect the logs from your webserver as well as the network exchanges from your browser to identify the source of the issue

    Here are a few rudimentary scripts I use to automate the cache cleanup and domain change for Prestashop 1.7.

    1. Change Prestashop's domain

    Use a template file to generate a .sql file to patch the database. If more convenient, you can manually run that on your database directly.

    patch-domain.sql.template:

    UPDATE ps_configuration SET value='${SHOP_DOMAIN}' WHERE name='PS_SHOP_DOMAIN';
    UPDATE ps_configuration SET value='${SHOP_DOMAIN}' WHERE name='PS_SHOP_DOMAIN_SSL';
    UPDATE ps_shop_url SET domain='${SHOP_DOMAIN}', domain_ssl='${SHOP_DOMAIN}';
    

    Generate the real .sql patch file, and apply it

    $ export SHOP_DOMAIN=mydomain.com
    $ envsubst < patch-domain.sql.template > patch-domain.sql
    $ mysql -u  -p  < patch-domain.sql
    

    2. Clear Prestashop cache

    Remove all cache files except index.php

    clear-cache.sh:

    #!/bin/bash
    base_dir='./shared/prestashop/html'
    
    # Clear class index in case any override changed
    rm ${base_dir}/cache/class_index.php
    
    declare -a cache_dirs=(
        "cache/smarty/compile"
        "cache/smarty/cache"
        "cache/cachefs"
        "img/tmp" # You might want to keep tmp images
        "themes/*/cache"
        "var/cache")
    
    # Clear all cache folder, ignoring 'index.php'
    for dir in "${cache_dirs[@]}"
    do
        echo Cleaning ${base_dir}/${dir}...
        find ${base_dir}/${dir} -type f ! -name index.php -delete
    done
    

    EDIT: The updated gist is accessible here

提交回复
热议问题