Apache mod_rewrite未加载css和js文件

Apache mod_rewrite未加载css和js文件,apache,mod-rewrite,Apache,Mod Rewrite,我有一个关于mod_重写条件/规则的奇怪问题 这是我使用的条件和规则 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php?params=$1 [QSA,L] 我的问题是,如果我访问www.example.com和www.example.c

我有一个关于mod_重写条件/规则的奇怪问题

这是我使用的条件和规则

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?params=$1 [QSA,L]
我的问题是,如果我访问www.example.com和www.example.com/page,它会很好地加载,但当我尝试加载www.example.com/page/category时,它会加载页面,但找不到css和javascript。它尝试从/css页而不是/目录加载它们

有没有想过我做错了什么?我在这里搜索了一下,并尝试了一些类似添加的东西

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

但这似乎没什么区别


感谢阅读

问题在于,静默重写不会告诉访问者的web浏览器他们实际上正在从不同的目录路径查看页面

因此,对/page的请求使浏览器(正确地)认为它正在查看web服务器上顶级公共目录中的资源,以及图像和CSS文件

但是对/page/category的请求使浏览器(错误地)认为它正在查看名为page的子目录中的资源。因此,当浏览器发送对CSS和图像文件的请求时,它将要求服务器在/page/sub目录中查找它们,该目录实际上并不存在。因此,当浏览器试图获取图像和CSS文件时,服务器返回404代码

解决这个问题的一种方法是将CSS、图像和其他页面引用资源的路径更改为绝对路径。以正斜杠开始它们,以便它们相对于实际的顶级公共目录定位。如果您只有少量的资源路径要更新,那么这可能是最好的方法。例如,更改:

src="image-name.png"
进入

这将迫使浏览器使用绝对路径请求文件,而不是根据相对路径推断错误的位置

要消除重写条件的需要,可以将重写规则更改为以下内容:

RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L]

这将不匹配任何包含句点(dot)符号的内容,因此将跳过对图像和CSS文件的请求。

您是否考虑过只使用,并删除图像前的“/”

src="/image-name.png"
RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L]