Configuración de routing en PHP y Apache2, error: The requested URL was not found on this server

publicado por: Anonymous

Tengo un sistema de Routing de PHP que funciona bien en local vagrant, pero cuando lo subo a mi apache2 y voy a algún enlace que vaya más allá de página de inicio (ej. https://www.myurl.com/about) me da error:

The requested URL /about was not found on this server

La página de inicio funciona bien. A continuación dejo los bloques de mi código (lo dejo todo porque no tengo ni idea de donde puede haber el error que Apache no tolera).

.htaccess

RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

index.php

require Router::load('routes.php')->direct(Request::uri());

routes.php

$router->define(
    "home" => 'controllers/home.php',
    "blog" => 'controllers/blog.php',
    "about" => 'controllers/about.php',
);

solución

Después de 1 día entero intentando modificar mi .htaccess y sistema de routing he averiguado la solución: tenía que ir a mi archivo /etc/apache2/apache2.conf:

sudo nano /etc/apache2/apache2.conf

Y cambiar la palabra None este código:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Por por la palabra All para que quede así:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Y finalmente:

sudo systemctl restart apache2

Ese cambio consiste en cambiar la palabra None por All en AllowOverride. Eso deja a que el archivo .htaccess cambie el routing. Anteriormente en una página había leído que ese cambio permite que .htaccess deje de ser ignorado, pero pensé que eso ya lo tenía bien, porque tenía en mi .htaccess una redirección a https y www. y me funcionaba.

Pues resulta que https y www. no son ignorados con o sin esa modificación pero sin AllowOverride All el routing en Apache2 no va a funcionar.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *