移除URL中php后缀的重写规则在XAMPP本地失效但服务器正常如何解决
XAMPP环境下PHP后缀去除重写规则失效排查方案
- 首先确认Apache重写模块已开启
打开XAMPP控制面板,点击Apache行的Config按钮选择httpd.conf,搜索LoadModule rewrite_module,确认该行开头没有#注释符,存在注释的话删除后重启Apache。 - 确认
.htaccess文件配置正确- 文件需放置在站点根目录(默认是XAMPP安装目录下的
htdocs文件夹,自定义站点的话对应站点根目录) - 确认文件名正确,Windows系统默认隐藏已知文件扩展名,需先开启显示扩展名,避免文件被误存为
.htaccess.txt - 确认文件开头已添加
RewriteEngine On声明,部分线上环境会全局开启重写引擎,本地XAMPP默认不会自动加载该配置
- 文件需放置在站点根目录(默认是XAMPP安装目录下的
- 确认
AllowOverride配置生效范围正确
很多用户仅修改了<Directory />全局段的配置,需找到对应站点目录的配置段(默认是<Directory "C:/xampp/htdocs">),将该段内的AllowOverride值设置为All后重启Apache。 - 调整重写规则适配XAMPP路径解析逻辑
XAMPP的%{REQUEST_FILENAME}变量解析逻辑和Linux服务器存在差异,可替换为以下规则:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*[^/])/?$ $1.php [L] - 开启重写日志精准定位问题
若上述操作均无效,可在httpd.conf中添加重写日志配置:
重启Apache后访问一次目标URL,查看对应日志文件的匹配记录,即可定位规则不生效的具体原因。# Apache 2.2 版本用以下配置 RewriteLogLevel 3 RewriteLog "C:/xampp/apache/logs/rewrite.log" # Apache 2.4 及以上版本用以下配置 LogLevel alert rewrite:trace3
内容的提问来源于stack exchange,提问作者Liam Bell
相关产品推荐
相关产品推荐

