entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Directorios con CSS cutre (Pretty URLs)

Buenas. Resulta que estoy adaptándole a mi sitio web URLs amigables (o Pretty URLs) y esta forma me fue muy útil (a través de .htaccess):

<IfModule mod_rewrite.c>
# Activar RewriteEngine
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.*)$ $1.php // para mostrar /ejemplo cuando se ingrese a traves de /ejemplo.php
RewriteRule ^cuenta/estadisticas estadisticas.php // para mostrar estadisticas.php cuando se ingrese a traves de /cuenta/estadisticas 
</IfModule>
ErrorDocument 400 /
ErrorDocument 401 /
ErrorDocument 403 /
ErrorDocument 404 /
ErrorDocument 500 /

El funcionamiento está perfecto, el problema es que, no sé por qué, no se están mostrando correctamente los CSS, se muestra como una web cutre, observen:

Acceso normal

enter image description here

Acceso desde directorio

enter image description here

Archivo donde poseo todo almacenado:

    <!-- Stylesheets -->
    <link rel="stylesheet" href="css/bootstrap.css">
    <link href="css/slider.css" rel="stylesheet">
    <link href="css/lrp.css" rel="stylesheet">
    <!-- <link href='https://fonts.googleapis.com/css?family=Lato:400,700,300,400italic' rel='stylesheet' type='text/css'> -->
    <link rel="stylesheet" href="css/font-awesome.css">
    <link rel="stylesheet" href="css/footer.css">
    <!-- jQuery -->
    <script src="http://code.jquery.com/jquery-1.12.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
    <script src="js/jquery.magnific-popup.js"></script>
    <!-- <script src="js/bootstrap.js"></script> -->
    <script src='http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js'></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/bootstrap-confirmation.js"></script>
    <script src="js/npm.js"></script>
    <script src='js/okzoom.js'></script>
    <script type="text/javascript" src="js/irarriba.js"></script>

De lo que sí estoy seguro es que no es un problema del .htaccess ni del Pretty URLs, ya que anteriormente intenté hacerlo pero sin usar esta manera más fácil si no que crear los directorios por mi cuenta. Por ejemplo, crear la carpeta cuenta, dentro de ella la carpeta estadisticas, y dentro de estadisticas ponía index. Pero esta manera daba mucho trabajo lógicamente, y ahí comprobé que no me servía esto del CSS.

1 Respuesta

4votos

carlossevi Puntos63580

Tienes que asegurarte que las URL en las que se intentan cargar los archivos CSS y JS efectivamente cargan el archivo correspondiente.

Creo que según la regla la petición http://tudominio.com/css/bootstrap.css se convierte a http://tudominio.com/css/bootstrap.css.php y el servidor no la encuentra.

Deberías poner una excepción para todas las rutas que contienen /css/ y /js/, un ejemplo que hace algo parecido:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]
RewriteRule ^(.*)$ $1.php

0voto

Leyes comentado

Sigue igual añadiendo la excepción, no sé qué pueda estar ocurriendo. Ahora si agrego un RewriteRule RewriteRule ^test estadisticas.php, accedo desde http://localhost/test y me muestra todo bien, pero si agrego un / más al link mencionado ya me muestra automáticamente mal todo como en la imagen, el problema es evidentemente en los directorios.
Gracias por tu respuesta.

2votos

carlossevi comentado

¿Has comprobado que efectivamente las URL a los CSS y JS no resuelven?

Te recomiendo esta página para hacer test online del mod_rewrite, yo estoy haciendo varias pruebas con este código:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]
RewriteRule ^(.*)$ $1.php

Estas dos URL

http://midominio.com/cuenta/mas/carpetas/estadisticas
http://midominio.com/cuenta/mas/carpetas/estilo.css

Se convierten en:

http://midominio.com/cuenta/mas/carpetas/estadisticas.php
http://midominio.com/cuenta/mas/carpetas/estilo.css

Para simplificarlo: copia aquí el estado actual de tus reglas de reescritura y pon dos ejemplos de URL, una que deba reescribirse y otra que no.

0voto

Leyes comentado

Gracias nuevamente por tu respuesta.

Lo tengo así:

<IfModule mod_rewrite.c>
# Activar RewriteEngine
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.*)$ $1.php
RewriteRule ^cuenta/estadisticas estadisticas.php
</IfModule>
ErrorDocument 400 /
ErrorDocument 401 /
ErrorDocument 403 /
ErrorDocument 404 /
ErrorDocument 500 /

Estas dos URLs:

http://localhost/cuenta/estadisticas
http://localhost/css/bootstrap.css (Solo así me lo muestra, si pongo solo bootstrap no me dirige como en el caso de estadísticas)

Se convierten en estas dos URLs (o sea, me muestra lo siguiente):

http://localhost/cuenta/estadisticas.php
http://localhost/css/bootstrap.css (Solo así me lo muestra, si pongo solo bootstrap no me dirige como en el caso de estadísticas)

En mi caso, no tengo creada la carpeta cuenta en el directorio ni poseo estadisticas.php dentro de la misma, solo más arriba con un RewriteRule hago como una llamada al estadisticas.php de la raíz principal para cuando se acceda desde /cuenta/estadisticas, pero se ve todo así como en las imágenes que brindé.

2votos

carlossevi comentado

Voy a hacerlo simple:

¿Has comprobado que efectivamente las URL a los CSS y JS no resuelven?

0voto

Leyes comentado

Si entro a http://localhost/css/bootstrap salta lógicamente el Internal Server Error, en cambio si le agrego .css como es un archivo existente me lo muestra normal, ¿ahí estaría comprobando si funciona o no o cómo podría hacerlo?

1voto

carlossevi comentado

El código html que has pegado arriba busca el fichero en css/bootstrap.css. Si tu página está en la URL http://localhost/cuenta/estadisticas, el fichero CSS que intenta cargar es http://localhost/cuenta/css/bootstrap.css, que no existe.

Esto podrás comprobarlo desde las opciones de desarrollo de tu navegador, comprobando si es capaz de encontrar todos los ficheros referenciados.

Podrías probar a cambiar la URL de acceso al recurso por ../css/bootstrap.css, o incluyendo la ruta de acceso completo para que te sirva en cualquier punto de tu página: http://localhost/css/bootstrap.css.

0voto

Leyes comentado

Muchas gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta