htacess redireccionando a archivos js y css

Aug 03 2020

Esta es mi estructura típica de PHP MVC:

-Resources
        --/my.css
        --/my.js
-Project
        --/.htaccess
        --/index.php
        --/Other Files & Folders

Esta es mi configuración de htaccess:


Options -Indexes

#AddHandler application/x-httpd-php53 .php .php5 .php4 .php3
RewriteEngine on

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Escriba ahora que todas mis solicitudes pasan por index.php. En mis archivos de proyecto, estoy accediendo a mis archivos css y js ubicados en la carpeta de Recursos como sigue:

<link rel="stylesheet" type="text/css" href="/../Resources/my.css"/>
<script src="/../Resources/my.js"></script>

Este resultado en el siguiente error

HTTP/1.1 404 Not Found 258ms

Intenté agregar la siguiente regla de reescritura en la configuración de htaccess, pero no funciona:

RewriteCond %{REQUEST_URI} ^/Resources/my.css
RewriteRule ^api(.*)$ ../Resources/my.css [NC,QSA,L]

No quiero cambiar la estructura de mi carpeta, ya que los mismos recursos CSS y JS se comparten entre varios proyectos, y es fácil administrarlos desde una sola ubicación. Solo quiero hacer referencia a ellos de alguna manera.

Tampoco quiero incluir el código en mi archivo de proyecto, como: include('../Resources/my.css')en PHP, no quiero esto.

Proporcione una solución a esto. Gracias y saludos

Respuestas

Top-Master Aug 03 2020 at 23:36

Para nosotros, es una especie de función no escrita colocar siempre los activos en subdirectorios del directorio raíz (el directorio que contiene el index.phparchivo es raíz).

De todos modos, no puede volver a escribir fuera de la raíz del documento. Esto es una cuestión de seguridad, y piénselo, ¿ example.com/../my-dirtiene algún sentido?


Una solución alternativa (como en otra publicación ) sería crear un enlace de símbolo a su Resourcesdirectorio, asígnele un nombre y mySymbolLinkluego podría hacer:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} ^Resources/.*
    RewriteRule ^Resources/(.*)$ /mySymbolLink/$1 [QSA,L]
</IfModule>

Pero aún necesita cambiar las rutas, por ejemplo, /../Resources/my.jsdebería /Resources/my.jsfuncionar.

HimanshuAgrawal Aug 08 2020 at 19:00

Bueno, como otros también han señalado en comentarios y respuestas, esto NO ES POSIBLE . No podemos referirnos arriba o fuera de nuestra raíz del proyecto desde la secuencia de comandos del lado del cliente. Podemos hacer cosas desde la codificación del lado del servidor, pero el código del lado del cliente, no es posible /