Windows下XAMPP中.htaccess报RewriteEngine not allowed here错误求助
核心问题定位
报错RewriteEngine not allowed here本质是Apache服务器没授权当前目录使用.htaccess里的Rewrite指令,哪怕你改了全局的AllowOverride All,也可能存在局部配置覆盖或者配置没生效的情况。
针对性排查步骤
1. 检查Apache虚拟主机配置
Windows下的Apache如果用了虚拟主机(httpd-vhosts.conf),得确保对应站点的<Directory>块里设置了AllowOverride All,不能只改httpd.conf的全局配置。示例:
<VirtualHost *:80> DocumentRoot "C:/xampp/htdocs/your-wordpress-site" ServerName your-local-domain.test <Directory "C:/xampp/htdocs/your-wordpress-site"> AllowOverride All Require all granted </Directory> </VirtualHost>
改完必须重启Apache服务,不然配置不生效。
2. 确认.htaccess文件权限(Windows环境)
Windows下Apache运行的用户(一般是SYSTEM或你当前登录的用户)需要对.htaccess文件有读取权限:
- 右键.htaccess文件 → 属性 → 安全 → 编辑 → 添加Apache运行用户,赋予读取权限。
- 别给文件设只读属性,不然Apache读不了。
3. 验证mod_rewrite是否真的加载
在WordPress根目录新建phpinfo.php文件,内容:
<?php phpinfo(); ?>
访问这个页面,搜索mod_rewrite,能找到说明模块已加载;找不到的话,检查httpd.conf里的LoadModule rewrite_module modules/mod_rewrite.so是否真的取消注释,还要确认Apache路径是否正确(比如XAMPP是modules/mod_rewrite.so,WAMP可能是bin/apache/apacheX.X.X/modules/mod_rewrite.so)。
4. 重置WordPress的.htaccess内容
先备份当前.htaccess文件,然后替换成WordPress默认的固定链接规则:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
确保文件开头没有多余空格或特殊字符,保存后再测试。
5. 检查Apache是否加载了httpd-vhosts.conf
如果用了虚拟主机,得确认httpd.conf里有没有这条配置(通常在文件末尾):
Include conf/extra/httpd-vhosts.conf
要是注释状态,取消注释后重启Apache。
内容的提问来源于stack exchange,提问作者Tibo Mertens

