.htaccess重写规则问题:带斜杠访问About页面CSS失效且无404错误
解决.htaccess RewriteRule的三个典型问题
我来一步步帮你搞定这几个坑,都是URL重写和路径解析里的常见问题:
问题1:访问example.com/About/时CSS加载失败
这是相对路径解析偏差导致的:当浏览器看到URL是example.com/About/时,会默认把当前"目录"当成/About/,所以加载CSS时会去example.com/About/css/xxx.css找资源(假设你HTML里写的是相对路径css/xxx.css),但你的CSS实际存在根目录的/css/文件夹里,自然找不到。
解决方法二选一,更推荐第一种:
- 用绝对路径引用静态资源:把HTML里的CSS、JS、图片引用都改成以
/开头的绝对路径,比如:
这样不管当前URL是什么,浏览器都会从网站根目录找资源,彻底避免路径混乱。<link rel="stylesheet" href="/css/style.css"> - 添加
<base>标签统一基准:在页面的<head>里加一行:
这会告诉浏览器所有相对路径都以网站根目录为基准,也能解决问题。<base href="/">
问题2:访问example.com/About/SomeText不返回404,反而显示无CSS的About.php
你的原规则RewriteRule About About.php [L,QSA]犯了模糊匹配的错误——只要URL里包含"About"字符串,就会触发重写。当访问About/SomeText时,规则会匹配到开头的"About",把整个请求重写到About.php,所以你看到的是About.php的内容,但同样因为路径解析错误,CSS加载失败。
要改成精确匹配,只让/About和/About/触发重写,修改规则为:
RewriteEngine On # ^ 匹配路径开头,$ 匹配路径结尾,/? 表示尾斜杠可选 RewriteRule ^About/?$ About.php [L,QSA]
解释下细节:
^About/?$:只会精准匹配/About(无尾斜杠)或/About/(有尾斜杠)这两种情况。- 当访问
/About/SomeText时,路径是About/SomeText,不满足匹配条件,服务器就会正常返回404错误,符合预期。
额外注意事项
- 确保
.htaccess文件放在网站根目录,并且服务器允许使用.htaccess(需要在Apache虚拟主机配置里设置AllowOverride All)。 - 如果还有其他Rewrite规则,把这条精确匹配的规则放在最前面,因为Rewrite规则是按顺序匹配的,
[L]标志会停止后续规则的处理。
内容的提问来源于stack exchange,提问作者Ahmed Ibrahim
相关产品推荐
相关产品推荐

