Reescritura de URL rompió el enlace a CSS

Estoy usando la siguiente configuración para la reescritura de url:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

En index.php se analiza $_GET['url'] para que en los siguientes ejemplos:

 ROOT/user/id/1/name/bobby // user is the page, id = 1, name = bobby ROOT/blog/post/123/title/welcome // blog is the page, post = 123, title = welcome 

Para que el primer parámetro (“no sé cómo llamarlo”) sea el nombre de la página, los siguientes par de parámetros son como “claves / valor”. Ahora cuando ROOT/ el enlace a las hojas de estilo que se insertan dentro del html de la página y la página se muestran correctamente. Busco ROOT/index (que es lo mismo que ROOT/ ) que muestra la página (con contenido y otras cosas) correctamente pero los enlaces (incluso si están escritos correctamente en la estructura html) a las hojas de estilo no se cargan. Y puedo verlo por el hecho de que mi página no tiene ningún CSS cuando la cargo.

¿Cómo puedo arreglar esto?

EDITAR

La ruta del archivo css es la siguiente:

 project/view/css/common.css 

El archivo donde está incluido está en

 project/public/index.php // the one with .htaccess and rewrite rules 

Esto me lleva a hacer un enlace (dentro de index.php) como

 ../view/css/common.css 

Pero esto funciona diferente dependiendo de cómo aparezca la url. Por ejemplo:

 # For URL = public/ project/view/css/common.css // good # For URL = public/index/ project/public/view/css/common.css // broken # For URL = public/index/key/value project/public/index/key/view/css/common.css // broken 

Creo que tienes dos problemas (ya que las respuestas dadas aún no resolvieron tu problema …):

  1. Estás reescribiendo todos los nombres de archivos, de modo que cuando el navegador solicita css/index.css tu reescritura lo transforma en index.php?url=css/index.css . La respuesta de @ cOle2 debería resolver eso.

  2. No está utilizando rutas absolutas para sus archivos css. El servidor está traduciendo la página solicitada como /user/id/1/name/bobby a /index.php?etc.... pero cuando el navegador solicita, por ejemplo, el archivo css que es algo así como css/index.css en su código, realmente solicitará /user/id/1/name/bobby/css/index.css y ese archivo no existe. Puede resolver eso utilizando solo rutas absolutas a sus archivos externos (css, js, imágenes, etc.) como /css/index.css .

Editar: Según sus comentarios, sus rutas son relativas y el navegador no puede acceder a su CSS, por lo que debe:

  1. Mueva el css al directorio project/public (como project/public/css )
  2. Use rutas absolutas a su CSS como /css/index.css .
  3. Asegúrese de que el servidor no reescribe las URL de sus archivos externos.

El comentario no me permite formatear el código, ¿puedes probar esto?

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

Actualizar

Puede intentar algo como esto en la sección de sus páginas para admitir la ruta relativa de sus archivos de imagen / css / js a los que se hace referencia en esa página:

    

Puede intentar eliminar ciertas extensiones de archivos de la regla de reescritura, por ejemplo, la siguiente regla ignorará los archivos de imágenes, css y js.

 # Do not process images or CSS files further RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L] 

Editar: Así es como lo aplicaría:

 RewriteEngine On RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]