Tengo un script que genera un archivo sitemap.xml en el directorio público. Es accesible en localhost:3000/sitemap.xml cuando está en desarrollo. Pero cuando se va a compilar, no puedo acceder al archivo desde la carpeta pública. Investigué un poco y descubrí que build no tiene acceso a la carpeta pública. Ayúdenme con una forma de acceder a public/sitemap.xml si hay alguno, si no, ¿es posible mostrar el formato .xml como una página en reac-router-dom?
Al leer su pregunta y comentarios, no hay mucho con lo que trabajar, sin embargo, puedo informarle un par de cosas.
La razón por la que su mapa del sitio podría funcionar localmente y no en una compilación es porque es muy probable que esté usando webpack-dev-server (si está usando CRA, entonces lo está usando), que a cambio usa express para servir localmente sus archivos . Cuando lo construya, ya no usará ese servidor y necesitará su propio servidor personalizado.
Cuando crea sus archivos para la producción, generará todos sus archivos en archivos js/css estáticos que luego deben servirse utilizando algún otro servidor (express/nginx/apache). En su pregunta, no ha especificado qué servidor está utilizando, más allá del servidor de desarrollo, por lo que solo puedo suponer que probablemente no tenga ninguno y/o dependa de algún host que esté utilizando sin darse cuenta de que estás usando uno.
Cuando desee servir algo como .xml, debe configurar el servidor para que realmente sirva archivos .xml. Además, no debe servir .xml como ninguna forma de ruta de reacción, no es una ruta y no tiene nada que ver con reaccionar. Su solicitud debe llegar directamente al servidor, es decir, nginx, y ese servidor debe estar configurado para servir el archivo .xml.
En sus comentarios mencionó que es "sitemap.exe", no estoy seguro de si es un error tipográfico, pero no puede servir y ejecutar archivos .exe en la web y ningún servidor estará configurado para hacerlo de manera predeterminada. El sitemap.xml o sitemap.txt debe contener solo el contenido de texto o xml válido y también debe asegurarse de que esté realmente en el directorio de compilación una vez que lo haya creado.
Si el .xml existe en su compilación y todo está bien, entonces lo único que necesita es agregar un bloque de ubicación a su servidor nginx, o agregar una ruta de obtención a su expreso (o recursos estáticos) para realmente servir ese archivo Si su servidor le está dando un 404 en ese momento, probablemente significa que no está reconociendo archivos .xml en absoluto. Eso necesita ser configurado en su servidor.
En nginx significa que necesita algo como location = /sitemap.xml .
Expresado, significa que necesita algo como app.get('/sitemap.xml') .
Una instalación predeterminada de nginx con try_files $uri $uri/ =404 también debería funcionar para .xml.
Resolví un problema similar ingresando a la sección "Reescrituras y redireccionamientos" y agregando una regla que dice que la "dirección de origen" de "/sitemap.xml" redirigirá a "/sitemap.xml" y prioricé esa regla sobre la regla en la que </^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|woff2|ttf|map|json)$)([^.]+$)/> se redirige a /index.html .