CSS, JS e imágenes no se muestran con bonita URL

Estoy tratando de reescribir la URL a través del archivo htaccess para que la siguiente URL

www.domain.com/subfolder/index.php?key 

se puede acceder por:

 www.domain.com/subfolder/index.php/key 

la “clave” especificada determinará qué página incluir en el código PHP. Ya tengo el siguiente código htaccess, sin embargo, las imágenes CSS, JS y similares no se muestran cuando se utiliza la segunda URL (limpia). ¿Alguna idea sobre cuál podría ser el problema?

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1 

Cuando utiliza las URL relativas, el navegador creará dinámicamente una URL completa utilizando la URL del recurso que cargó. En otras palabras: usa la url tal como se muestra en la barra de direcciones. En su caso ( www.domain.com/subfolder/index.php/key ) intenta cargar cualquier URL relativa relativa a www.domain.com/subfolder/index.php/ . Sin embargo, sus recursos no se encuentran allí.

Tienes dos opciones para resolver este problema:

  • Convierte tu URL relativa en url absoluta, al menos absoluta para la raíz del dominio. Algo como debería convertirse en .

  • Agrega una base a tu elemento principal. Esta base se usará en lugar de la URL del recurso para calcular la URL completa. Debe agregar a su elemento . / se usará como la base de cualquier URL relativa.

¿Has probado la URL base? Esa es la mejor solución que he encontrado. Simplemente ponga uno en la cabeza y luego incluso puede darle una identificación y acceder a la URL con javascript.

   

Acceso con jquery

 var base = $('#baseElement').attr('href'); 

¡En realidad hay una solución con .htaccess!

Asumiendo que su index.php está ubicado en /mysite/ y sus archivos de recursos están en /mysite/scripts/ , /mysite/images/ y /mysite/style/ like minas, podría ir así:

 RewriteEngine on #first exclude those folders RewriteBase "/mysite/" RewriteRule ^(style|scripts|images)($|/) - [L] #then go with your rules (the [L] terminates the ruling) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1 

Puede ver .htaccess mod_rewrite – cómo excluir el directorio de la regla de reescritura para algunas otras maneras

Además, puedes intentar agregar esto a tu HTaccess:

 RewriteBase /