如何通过htaccess设置URL重定向时排除指定扩展名的静态文件
问题1:重定向规则排除指定后缀静态文件
你可以在现有RewriteRule前增加一条过滤规则,跳过css、js、jpg、png、pdf后缀的请求,修改后的完整.htaccess代码如下:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 新增规则:排除指定后缀的静态文件 RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|pdf)$ [NC] RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
[NC]标识表示匹配时不区分大小写,即使请求后缀是大写的CSS、PNG也能正常命中排除规则。
问题2:多级路径下静态资源加载失败
这个问题和重定向规则无关,是相对路径引用静态资源的特性导致:
你当前用的是相对路径css/bootstrap.min.css引入样式表,浏览器会自动将相对路径拼接在当前访问的URL路径后发起请求:
- 访问
url.com/test时,浏览器请求路径是url.com/css/bootstrap.min.css,路径正确可以正常加载 - 访问
url.com/test/test2时,浏览器请求路径是url.com/test/css/bootstrap.min.css,该路径不存在自然加载失败
修复方案二选一即可:
- 改用绝对路径引用静态资源,路径开头加斜杠代表从站点根目录开始查找:
<link href="/css/bootstrap.min.css" rel="stylesheet">
- 在页面
<head>标签最开头添加base标签,指定当前页面所有相对路径的基准地址为站点根目录:
<base href="/">
内容的提问来源于stack exchange,提问作者fschneider
相关产品推荐
相关产品推荐

