You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除.php扩展名并保留查询参数时遇404错误求解决

问题描述

尝试移除URL中的.php扩展名,并把查询参数q=123转成路径形式,结果出现404错误。

  • 当前URL:example.com/folder/file.php?q=123
  • 期望URL:example.com/folder/file/123

原.htaccess配置:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^$1/(.*)$ /$1.php?q=$2

原配置的问题

  • 规则顺序搞反了:得先把美观的URL转成实际的PHP文件路径,再处理无扩展名访问的规则,不然第一条规则的L标志会直接终止后续规则执行,第二条规则根本跑不起来。
  • 第二条规则语法错误:^$1/(.*)$里的$1是无效的,没有对应的捕获组,正则根本匹配不到任何内容。
  • 没做真实目录/文件的判断,可能把正常的目录访问给错误重写了。

正确的.htaccess配置

RewriteEngine On

# 把 folder/file/123 这类美观URL重写为实际的 folder/file.php?q=123
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/(\d+)$ $1/$2.php?q=$3 [L]

# 允许无扩展名访问PHP文件(比如 folder/file 对应 folder/file.php)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

规则说明

  1. 第一条规则:

    • 先判断请求的不是真实目录和文件,避免干扰正常访问
    • 匹配目录/文件名/数字格式的URL,把捕获到的内容对应到目录/文件名.php?q=数字,完成重写
    • L标志表示匹配成功后就停止执行后续规则
  2. 第二条规则:

    • 同样先排除真实目录
    • 确认对应的.php文件确实存在,避免无效请求
    • 把无扩展名的请求指向对应的.php文件,支持直接访问folder/file

内容的提问来源于stack exchange,提问作者Adir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:25:44