Jump to content

Error 404 cuando intento acceder a ciertas opciones del backend después de haber cambiado de directorio Prestashop 1.7


Recommended Posts

Hola foro,

Mi intención es hacer una copia exacta de mi instalación actual de Prestashop para instalar un nuevo theme e ir realizando los cambios sin afectar a la instalación que está en producción. Para ello he creado un nuevo directorio "/test".

Después de haber movido de directorio mi instalación de Prestashop 1.7 de la carpeta raíz del alojamiento a la subcarpeta "/test", cuando accedo a la administración e intento ir a ciertas opciones de la configuración de la tienda me da un error 404. Estas son las opciones a las que no tengo acceso:

  • Módulos
    • Catálogo de Módulos
    • Modul Manager
  • Diseño
    • Posiciones
    • Link Widget
  • Transporte
    • Preferencias
  • Pagos
    • Métodos de pago
    • Preferencias
  • Internacional
    • Localización
    • Traducciones
  • Parámetros de la tienda
    • Configuración
    • Configuración de Pedidos
    • Configuración de Productos
    • Ajustes sobre clientes
    • Tráfico & SEO
  • Parámetros avanzados
    • Información
    • Rendimiento
    • Administración
    • Dirección de correo electrónico
    • Importar
    • Registros/Logs

Aparte de esto, todas las páginas del frontend funcionan correctamente.

 

Antes de mover los archivos al nuevo directorio "/test" he seguido los siguientes pasos:

  • Limpiar y desactivar caché
  • Desactivar friendly urls
  • hacer backup de base de datos

Una vez copiados los archivos al directorio "/test" he realizado las siguientes acciones:

  • crear nueva base de datos y restaurar backup
  • modificar los campos de la tabla ps_shop_url:
    • domain: midominio.com (no lo he modificado ya que el dominio sigue siendo el mismo)
    • domain_ssl: midominio.com (no lo he modificado ya que el dominio sigue siendo el mismo)
    • physical_uri: /test/ (modificado)
  • modificar el archivo parameters.php de la carpeta /test/app/config/ para cambiar el nombre de la base de datos a la que se debe conectar ahora
  • eliminar el archivo .htaccess ya que no estoy utilizando las friendly urls

He buscado en los foros por si me había dejado algún paso pero creo que he hecho todo lo necesario para que funcione.

¿A alguien se le ocurre que puede estar pasando?

¡Muchas gracias por vuestra ayuda!

 

Link to comment
Share on other sites

Buenas,

Si en la raíz del hosting tienes un Prestashop, está cogiendo el .htaccess de la raíz, por eso te estará dando error 404:

/.htaccess
/test/.htaccess

Las reglas del fichero .htaccess son heredables entre directorios, por lo que no puedes eliminarlo, tendrás que mantenerlo modificando las rutas del mismo.

Link to comment
Share on other sites

4 hours ago, Loadinges said:

Buenas,

Si en la raíz del hosting tienes un Prestashop, está cogiendo el .htaccess de la raíz, por eso te estará dando error 404:

/.htaccess
/test/.htaccess

Las reglas del fichero .htaccess son heredables entre directorios, por lo que no puedes eliminarlo, tendrás que mantenerlo modificando las rutas del mismo.

Hola,

Gracias por tu respuesta. He copiado el .htaccess a la carpeta /test/ y he modificado la ruta del archivo pero sigo teniendo el mismo problema.

Este es mi archivo .htaccess con la ruta modificada, ¿me podrías ayudar a confirmar que he hecho bien el cambio de rutas? no tengo mucha experiencia con el .htaccess:

 

# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums

<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE On
</IfModule>


# Disable Multiviews
Options -Multiviews

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule . - [E=HTTP_AUTHORIZATION:%1]

#Domain: midominio.com
RewriteRule . - [E=REWRITEBASE:/test/]
RewriteRule ^api$ api/ [L]

RewriteRule ^api/(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]

# Images
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com/test$
RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader for IE and fancybox
RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]

# Dispatcher
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</IfModule>

AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType application/font-woff .woff
AddType font/woff2 .woff2
<IfModule mod_headers.c>
    <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
        Header set Access-Control-Allow-Origin "*"
    </FilesMatch>
</IfModule>

#If rewrite mod isn't enabled
ErrorDocument 404 /index.php?controller=404

# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

php_value post_max_size "512M"
php_value max_input_vars 90000
php_value memory_limit 512M

--------------

Gracias

Link to comment
Share on other sites

Buenas,

Has modificado la ruta de forma errónea, la forma correcta sería:

# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums

<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE On
</IfModule>


# Disable Multiviews
Options -Multiviews

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule . - [E=HTTP_AUTHORIZATION:%1]

#Domain: midominio.com
RewriteRule . - [E=REWRITEBASE:/test/]
RewriteRule ^api$ api/ [L]

RewriteRule ^api/(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]

# Images
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^midominio.com$
RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader for IE and fancybox
RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]

# Dispatcher
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</IfModule>

AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType application/font-woff .woff
AddType font/woff2 .woff2
<IfModule mod_headers.c>
    <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
        Header set Access-Control-Allow-Origin "*"
    </FilesMatch>
</IfModule>

#If rewrite mod isn't enabled
ErrorDocument 404 /test/index.php?controller=404

# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

Prueba así.

Link to comment
Share on other sites

Hola,

 

He realizado los cambios que me has comentado en el archivo .htaccess, después he borrado la cache manualmente desde el FTP pero siguen sin funcionar algunas opciones del backend. Me sigue mostrando el error 404.

¿Crees que si activo el modo Debug puedo obtener más información de la causa de este error?

Gracias

Link to comment
Share on other sites

Link to comment
Share on other sites

Es extraño, los pasos indicados parecen correctos, ¿y si activas las URL amigables en el entorno de pruebas tampoco funciona?

Observo que el tipo de servidor web es Nginx, salvo que esté como proxy inverso de Apache, las URL amigables no están definidas en el fichero .htaccess, ya que Nginx no es capaz de leer las URL amigables, hay que regenerarlas en formato especial de Nginx. Quizás sea ese el problema.

Link to comment
Share on other sites

Sí, es extraño. He activado las urls amigables desde la base de datos ya que no tengo acceso a la página de Tráfico & SEO. Lo he hecho en la tabla ps_configuration, cambiando el valor a "1" del registro PS_REWRITING_SETTINGS (imagen adjunta).

He borrado los archivos de la carpeta var/cache y lo he vuelto a probar pero sigue sin funcionar 😥

Sí, correcto, es un servidor Nginx. ¿Sabes cómo se pueden regenerar desde el servidor?

Screenshot 2021-08-17 at 12-28-05 Datos de Tabla - Webmin 1 979 en ubuntuserver (Ubuntu Linux 18 04 1).png

Link to comment
Share on other sites

Hola

Lo que tú quieres hacer se llama clon.

Para clonar, no tienes que hacer nada antes, se hace todo después de haberlo copiado a la carpeta clon.

Los pasos son

1 - Crear una carpeta se llamará clon

2 - Crear una base de datos de nombre clon

3 - Copiar la carpeta original a la carpeta clon

4 - importar la base de datos original a la base de datos creada clon

5 - Ahora es cuando hay que modificar la base de datos clon y el directorio clon

 

Y es así como te funcionará bien

Edited by aixos (see edit history)
Link to comment
Share on other sites

Hola Aixos,

Gracias por tu respuesta. En realidad es eso lo que hice previamente, he creado un clon exactamente igual desde el servidor, lo único diferente es el nombre de la carpeta y la base de datos que en mi caso es test, pero he seguido los mismos pasos que tu has enumerado.

He estado investigando un poco más y he visto que el log de errores del servidor me da el siguiente mensaje cuando intento acceder a alguna de las opciones del backend que me da un error 404:

request.CRITICAL: Uncaught PHP Exception Symfony\Component\Routing\Exception\RouteNotFoundException: "Unable to generate a URL for the named route "admin_customers_view" as such route does not exist." at /var/www/html/test/var/cache/prod/appProdProjectContainerUrlGenerator.php line 215 {"exception":"[object] (Symfony\\Component\\Routing\\Exception\\RouteNotFoundException(code: 0): Unable to generate a URL for the named route \"admin_customers_view\" as such route does not exist. at /var/www/html/test/var/cache/prod/appProdProjectContainerUrlGenerator.php:215)"} []

Por lo que he entendido del mensaje, es como si Prestashop no pudiera regenerar las url de estas opciones del backend.

Link to comment
Share on other sites

Hola

en esos casos que entras en bucle y salen fallos , lo mejor es empezar de cero. 

Los clones de web en producción, se hacen muy frecuentemente para hacer pruebas

Lo dicho, clonar tú web se hace muy rápido, no pierdas tiempo en buscar fallos, piensa que esta en tú mismo servidor y esto es fácil de clonar

Sigue los pasos que te he puesto y te funcionará

 

Edited by aixos (see edit history)
Link to comment
Share on other sites

Hola de nuevo aixos,

He empezado desde cero, he realizado el clon siguiendo los pasos que has comentado y me sigue pasando lo mismo. Sigo sin poder acceder a ciertas páginas de la administración.

¿Se os ocurre alguna idea?

Muchas gracias por vuestra ayuda

Link to comment
Share on other sites

Hola

Es muy raro lo que te pasa, según tus pasos debería funcionar.

Si quieres te lo miro por Cpanel, me pasas los datos por mensaje privado.

Estás en el mismo servidor y usas ftp?,asi no lo hago yo.

Se usa el Cpanel para todo.

Saludos

Link to comment
Share on other sites

Hola Aixos,

 

Sí, es muy raro. En otros servidores donde he hecho esto me ha funcionado perfecto, pero en este caso en concreto no va.

Vale, miro de enviarte un mensaje privado con los datos. Sí, todo está en el mismo servidor, aunque el panel de control es algo diferente al Cpanel de Plesk.

Gracias

Link to comment
Share on other sites

3 hours ago, yozz said:

Hola Aixos,

 

Sí, es muy raro. En otros servidores donde he hecho esto me ha funcionado perfecto, pero en este caso en concreto no va.

Vale, miro de enviarte un mensaje privado con los datos. Sí, todo está en el mismo servidor, aunque el panel de control es algo diferente al Cpanel de Plesk.

Gracias

Buenas,

Como te comentaba en respuestas anteriores, sospecho que estás usando Nginx y las reglas para las URL amigables están definidas internamente en los virtual host de Nginx. Al ser Nginx, no es capaz de leer las reglas del fichero .htaccess, por eso no funcionan. Si desde Cpanel tienes acceso a los virtual host de Nginx podemos echarle un vistazo, o mejor con acceso SSH, será más sencillo.

Link to comment
Share on other sites

On 8/23/2021 at 11:46 AM, aixos said:

Hola @yozz

lo mejor es utilizar el phpmyadmin para manejar la base de datos

saludos

Hola Aixos, sí eso sería lo mejor sin duda. Pero lamentablemente el servidor actual no lo gestiono yo y no puedo hacer ese tipo de modificaciones. Solo puedo utilizar las herramientas de gestíón que me ofrecen. Hablaré con administrador del server por si puede hacer alguna cosa.

Gracias

Link to comment
Share on other sites

On 8/23/2021 at 1:18 PM, Loadinges said:

Buenas,

Como te comentaba en respuestas anteriores, sospecho que estás usando Nginx y las reglas para las URL amigables están definidas internamente en los virtual host de Nginx. Al ser Nginx, no es capaz de leer las reglas del fichero .htaccess, por eso no funcionan. Si desde Cpanel tienes acceso a los virtual host de Nginx podemos echarle un vistazo, o mejor con acceso SSH, será más sencillo.

hola Loadinges,

Sí, el servidor es Nginx. Pues ahora que lo comentas tiene toda la pinta de que pueda ser por eso.

Si, tengo acceso vía SSH al server y si podemos ver/modificar los virtual host. ¿Podrías ayudarme a revisar eso? ¿Cómo lo podemos hacer?

Gracias

Link to comment
Share on other sites

3 minutes ago, Loadinges said:

Buenas,

Si quieres darnos acceso por mensaje privado podemos echarle un vistazo para indicarte los cambios que deberías hacer.

Hola,

De acuerdo. Ahora te paso el acceso por privado y lo vamos comentando.

Link to comment
Share on other sites

1 hour ago, Loadinges said:

Buenas,

Si quieres darnos acceso por mensaje privado podemos echarle un vistazo para indicarte los cambios que deberías hacer.

 

Hola,

Finalmente el problema se ha podido solucionar. Tal como decía Loadinges, el motivo era porque mi servidor usa Nginx y las reglas para las URL amigables están definidas internamente en los virtual host de Nginx. Hemos tenido que modificar Nginx el archivo de virtual host para añadir unas nuevas reglas que afecten al subdirectorio donde tengo mi instalación "clon" ya que nginx no era capaz de leer las reglas del fichero .htaccess.

Este es el cambio que he tenido que aplicar en el archivo virtual host por defecto /etc/nginx/sites-enabled/default

 

    # Reglas para la url del dominio principal
    location /admin971oj3zew/ {
        if (!-e $request_filename) {
            rewrite ^/.*$ /admin971oj3zew/index.php last;
        }
    }

    # Reglas para la url del dominio /test de instalación clon
    location /test/admin971oj3zew/ {
        if (!-e $request_filename) {
            rewrite ^/.*$ /test/admin971oj3zew/index.php last;
        }
    }

Después de aplicar el cambio y guardar, he tenido que reiniciar nginx y entonces ya ha funcionado todo.

 

Muchas gracias Loadinges y Aixos por vuestra ayuda

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...