htaccess重写规则错误地重定向资源请求(CSS,JS)

时间:2012-11-13 20:24:26

标签: php .htaccess rewrite

我看过这个问题的一些可能的重复,但重写规则对项目非常具体,所以我找不到合适的答案。

问题的关键? htaccess文件正在重写(我认为)对某些文件(CSS,JS和图像)的请求。

我有一个htaccess文件设置为如下指示:

Options +FollowSymLinks
RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]

它需要一个像localhost / framework / booking / dashboard这样的URL并重写为localhost / framework / index.php?controller = booking& action = dashboard

我本地www文件夹中的相关文件结构如下所示:

框架
-index.php
-htaccess
-views
-Booking
-dashboard.php
-wuxia-blue.css

dashboard.php中的CSS链接如下:

<link rel='stylesheet' type='text/css' href="wuxia-blue.css">

正在发出的HTTP请求似乎是: /framework/booking/wuxia-blue.css

它应该是: /framework/views/booking/wuxia-blue.css

理想情况下,我想使用与

类似的东西
href="<?php echo(CSS . "wuxia-blue.css"); ?>".

其中CSS是应用程序中定义的常量,其中wuxia-blue.css(和所有其他css文件)包含在样式表的预定义文件夹中。显然这适用于其他资产,如.js文件和图像。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

htaccess规则是正确的 - 问题在于您的文件夹结构。

当您创建相对链接时,它相对于地址栏中显示的当前网址 - 您所处的文件的位置并不相关。

您的视图文件位于/framework/views/booking/dashboard.php,但浏览器只能看到url / framework / booking / dashboard。这意味着浏览器将资源的位置解释为/framework/booking/dashboard/wuxia-blue.css

就个人而言,我建议您将所有css和图像保留在/ images和/ css框架之外。否则,可能必须在框架中添加一些代码来提供图像文件,因为所有图像请求都将通过framework.php文件运行。