Magento redirects a la vieja URL luego de mover un site

Mover un site Magento (casi) siempre es problemático. Y una de las cosas más aburridas es actualizar las URLs de las tiendas luego de mover un site.

Por lo cual me hice un pequeño script para automatizar un poco esto.

Para ejecutarlo hay que crear un carpeta llamada [MAGE_ROOT]/scripts/update-stores_urls y meter este php (update-stores-urls.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
/*
* Luego de importar el SQL de un website Magento actualiza las URLs de las tiendas.
*
* 1. Setear el host para las urls unsecure.
* 2. Setear el host para las urls secure.
* 3. Setear los datos de conexión a la base de datos.
* 4. Ejecutar desde la línea de comandos:
*
* $ sh run.sh
*
*/


define ('SOURCE_HOST_UNSECURE', 'http://www.mysite.com/');
define ('SOURCE_HOST_SECURE', 'https://www.mysite.com/');

define ('TARGET_HOST_UNSECURE', 'http://new.mysite.local/');
define ('TARGET_HOST_SECURE', 'http://new.mysite.local/');

$db['name'] = 'db_magento';
$db['user'] = 'db_user';
$db['pass'] = 'db_pass';
$db['host'] = 'db_host';

$conn = mysql_connect($db['host'],$db['user'],$db['pass']);
@mysql_select_db($db['name']) or die(mysql_error());

// Se actualizan las URLs no seguras
$query = "SELECT config_id, value FROM core_config_data WHERE path LIKE 'web/unsecure/%'";

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
$config_id = $row['config_id'];
$value = str_replace(SOURCE_HOST_UNSECURE, TARGET_HOST_UNSECURE, $row['value']);

$query = "UPDATE core_config_data SET value = '$value' WHERE config_id = $config_id";

echo $query . "\n";

mysql_query($query);
}

// luego actualizo los configs secure
$query = "SELECT config_id, value FROM core_config_data WHERE path LIKE 'web/secure/%'";

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
$config_id = $row['config_id'];
$value = str_replace(SOURCE_HOST_SECURE, TARGET_HOST_SECURE, $row['value']);

$query = "UPDATE core_config_data SET value = '$value' WHERE config_id = $config_id";

echo $query . "\n";

mysql_query($query);
}

echo "Actualizadas las URLs de las tiendas :)\n";

?>

Y el siguiente sh (run.sh):

1
2
3
4
5
6
# actualizacion de las urls en la bd
php update-stores-urls.php

# limpieza de la cache
rm -fr ../../var/cache/*
rm -fr ../../var/session/*

Para ejecutarlo correr desde línea de comandos:

1
$ sh run.sh

Para más info de cómo acá hice un mini tutorial sobre los pasos a seguir para mover / copiar un site Magento a un servidor MAMP.