La verdad es que el Error 404 en XAMPP casi nunca es que el archivo no exista. Es una pelea contra la configuración del servidor. Te cuento por dónde le meto mano, en el orden en que lo hago, porque si empiezas a tocar archivos de configuración sin ton ni son, la lías.
Lo primero es lo más tonto y por eso casi nadie lo comprueba: la URL en el navegador. En XAMPP, si tu proyecto está en C:\xampp\htdocs\mi_proyecto, la URL es http://localhost/mi_proyecto. Punto. Ni una letra más. Si le pones http://localhost/xampp/mi_proyecto, vas a llorar. Lo sé por experiencia. Y ojo con las mayúsculas, en algunos entornos importan.
Si la URL está bien, el siguiente sospechoso es el archivo .htaccess. Este archivo es un dolor de cabeza hermoso. Si falta o está corrupto, Apache no sabe cómo redirigir las peticiones y suelta el 404. Para WordPress es vital. Busca en C:\xampp\htdocs\[nombre-de-tu-carpeta]. Si no está, créalo con un editor de texto (como el Bloc de notas) y pega esto:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Guárdalo como .htaccess (con el punto al principio) en la carpeta de tu proyecto. Solo con esto, a veces se arregla todo. A veces el archivo existe pero está jodido; renómbralo a .htaccess_backup y crea uno nuevo desde cero. Reinicia Apache después.
Los plugins de WordPress son unos genios para romper cosas. Si el error apareció después de instalar o actualizar uno, ahí está tu culpable. Desactívalos todos desde el panel de administración. Si ni siquiera puedes acceder al panel, ve por la fuerza bruta: renombra la carpeta plugins dentro de wp-content a plugins_old. Esto los desactiva a todos. Si el 404 desaparece, vuelve a activarlos de uno en uno para pillar al traidor. Después, no lo borres solo desde WordPress; entra a phpMyAdmin (http://localhost/phpmyadmin) y revisa la tabla wp_options. Algunos plugins dejan basura ahí incluso después de desinstalarlos.
Ahora, el problema gordo: el puerto. Apache por defecto usa el puerto 80, pero si tienes Skype, IIS, o cualquier otro servidor web corriendo, se lo queda. Tienes que cambiar el puerto de Apache. En el panel de control de XAMPP, haz clic en «Config» al lado de Apache y elige httpd.conf. Busca la línea que dice Listen 80 y cámbiala a Listen 8080. Busca también ServerName localhost:80 y pon localhost:8080. Guarda. Luego, en el navegador, prueba con http://localhost:8080/tu_proyecto. Si funciona, ya sabes que el problema era el puerto. Pero esto tiene una consecuencia: ahora todos tus proyectos se acceden con :8080 en la URL. Y si tienes un WordPress instalado, tendrás que buscar y reemplazar en la base de datos todas las instancias de http://localhost por http://localhost:8080, o se romperán los enlaces.
Si aún nada, toca revisar la configuración de los «virtual hosts». Es más avanzado, pero si estás trabajando con varios proyectos o un CMS como el caso de Cockpit que mencionan en los foros, puede que necesites uno. Tienes que editar C:\xampp\apache\conf\extra\httpd-vhosts.conf y añadir un bloque como este:
<VirtualHost *:80>
ServerAdmin webmaster@tusitio.local
DocumentRoot "C:/xampp/htdocs/tu_proyecto"
ServerName tusitio.local
</VirtualHost>
Luego, edita el archivo hosts (en C:\Windows\System32\drivers\etc\) y añade la línea 127.0.0.1 tusitio.local. En el navegador, usarías http://tusitio.local. A veces, por alguna razón, Apache se comporta mejor con un nombre de dominio virtual que con localhost.
Por último, física y literalmente, revisa que tus archivos estén en htdocs. Parece una tontería, pero más de una vez he estado editando un archivo en C:\xampp\htdocs\proyecto y, por error, el navegador apuntaba a una carpeta con un nombre similar en otro lado. El servidor solo sirve lo que está dentro de htdocs. Y asegúrate de que dentro de tu carpeta hay un index.php o index.html. Si intentas acceder a una carpeta sin un archivo índice y no tienes listado de directorios activado, también te dará un 404.
Mi flujo es este: 1) URL, 2) .htaccess, 3) plugins, 4) puerto. El 90% de las veces el problema está en uno de estos. Si has tocado algo de la configuración de Apache o instalado algo nuevo, entonces salta a los virtual hosts. No hace falta hacer todo de golpe; prueba, reinicia Apache, y vuelve a probar.