Apache可通过.htaccess中RewriteRule隐藏.html/.php后缀,实现/about等简洁URL;需启用mod_rewrite、AllowOverride All,并用两段式RewriteCond优先匹配.html再.php,配合!.w{2,4}$排除静态资源,确保[L]终止规则避免冲突。
apache 可以用 rewriterule 隐藏真实文件后缀名,比如把 /about.html 或 /contact.php 变成 /about、/contact 这样的简洁 url,浏览器地址栏不变,服务器内部自动匹配并执行对应文件。
前提:确保基础配置就绪
隐藏后缀名依赖 mod_rewrite 正常工作,需确认以下三点已满足:
- Apache 已启用
rewrite_module(检查httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so未被注释) - 目标目录允许重写:虚拟主机或主配置中设置
AllowOverride All,且.htaccess文件所在目录有读取权限 -
.htaccess文件开头必须包含RewriteEngine On,否则所有规则无效
核心规则:按优先级匹配 .html 和 .php
推荐使用两段式条件判断,先查 .html 文件是否存在,再查 .php,避免冲突。规则如下:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
RewriteRule !.w{2,4}$ %{REQUEST_URI}.html [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule !.w{2,4}$ %{REQUEST_URI}.php [L]
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
!\.w{2,4}$排除已带扩展名的请求(如.css、.jpg),防止误重写静态资源 -
%{DOCUMENT_ROOT}%{REQUEST_URI}.html -f检查物理文件是否存在,只对真实存在的文件生效 - [L] 表示匹配即终止,不继续执行后续规则,保证逻辑清晰
进阶技巧:统一入口 + 隐藏 index.php
若网站采用单入口模式(如 ThinkPHP、Laravel),还需配合隐藏 index.php:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
注意:此写法要求 Apache 开启 AcceptPathInfo On,否则可能报 “No input file specified” 错误。
避坑提醒:常见失效原因
规则写完却没效果?重点排查这几项:
- 在
.htaccess中,正则开头不能加/(例如写^/about是错的,应写^about) - 不要启用
MultiViews(在.htaccess加Options -MultiViews),它会与重写冲突导致 500 错误 - 避免无限循环:确保
RewriteCond判断准确,比如!-f和!-d缺一不可 - 测试时清空浏览器缓存,或用无痕窗口访问,防止 301 重定向被缓存干扰判断

















