Apache + mod_rewrite 启用伪静态第一关是确认mod_rewrite模块是否加载:打开httpd.conf文件,搜索LoadModule rewrite_module,确保该行未被注释(即前面无#号),否则.htaccess将被忽略。

Apache + mod_rewrite 能否启用
本地 PHP 环境是否支持伪静态,第一关是看 mod_rewrite 模块有没有加载。很多一键环境(如 XAMPP、WampServer)默认不启用它,导致 .htaccess 文件完全被忽略。
- 打开 Apache 配置文件
httpd.conf(路径通常在XAMPP\apache\conf\httpd.conf或Wamp\bin\apache\apache{version}\conf\httpd.conf) - 搜索
LoadModule rewrite_module,确保该行未被注释(即前面没有#) - 再搜索
,找到你项目所在的目录段(比如 ),确认其中包含这两行:AllowOverride All Require all granted
(旧版 Apache 2.2 是Order Allow,Deny+Allow from all) - 重启 Apache,用
phpinfo()页面检查Loaded Modules是否含mod_rewrite
.htaccess 文件写法与常见失效原因
即使模块开了,.htaccess 仍可能不生效——最常踩的坑是规则语法错误或匹配逻辑没对上。
- 规则必须放在网站根目录(或子目录)下,且文件名严格为
.htaccess(注意开头的点,Windows 资源管理器可能隐藏扩展名,建议用编辑器另存为) - 基础重写示例(将
/article/123映射到/index.php?id=123):RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^article/(\d+)$ index.php?id=$1 [L] -
RewriteBase很关键:如果项目不在 Apache 根目录(比如放在localhost/myapp/),这里要改成RewriteBase /myapp/,否则重写路径会错位 - 测试时清空浏览器缓存,或用隐身窗口访问,避免 304 缓存干扰判断
PHP 内置服务器不支持 .htaccess
如果你用的是 php -S localhost:8000 启动的内置服务器,那直接放弃 .htaccess ——它压根不读这个文件,也不支持 mod_rewrite。
牛NIUCMS本地O2O系统是一个以php+mysql进行开发的o2o网站系统。NIUCMS是一款强大的网站管理系统。支持智慧城市、智慧小区、智慧乡村、本地生活门户、本地O2O平台的构建。请注意以下几点:1、这套源码必须要服务器支持伪静态,是支持.htaccess规则的伪静态,一般Apache服务器支持,别搞的下载回去以后说什么缺 少文件,其实源码并非缺少文件。2、这套源码请在php 5.4环境下
- 替代方案只有两种:
– 改用 Apache 或 Nginx 本地环境
– 在 PHP 路由层手动解析 URL(例如读取$_SERVER['REQUEST_URI'],自行分发请求) - 简单模拟伪静态路由示例:
- 这种写法无法替代完整重写功能(比如重定向、条件跳转、隐藏真实路径等),仅适合开发阶段快速验证逻辑
Windows 下 Apache 的额外陷阱
在 Windows 上配伪静态,有两个隐蔽但高频的问题:
立即学习“PHP免费学习笔记(深入)”;
-
.htaccess文件权限:Apache 进程需有读取权限。若用管理员权限启动 Apache 但文件属主是普通用户,有时会静默失败。建议右键文件 → 属性 → 安全 → 给Everyone或Users组添加“读取”权限 - URL 中含中文或特殊字符时,Apache 默认拒绝处理(报 404 或 400)。可在
httpd.conf中添加:AllowEncodedSlashes On
并重启服务 - 某些杀毒软件(如 360、火绒)会拦截 Apache 对
.htaccess的读取,临时关闭试试
RewriteBase 和 Windows 下的文件权限,调不通时先盯住这两处。










