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

如何移除URL中的.php扩展名且不中断PHP代码执行?

解决移除.php扩展名后PHP代码无法运行的问题

你的.htaccess只完成了外部重定向(把带.php/.html的旧URL跳转到不带扩展名的新URL),但缺少了内部重写规则——也就是把用户访问的不带扩展名的请求,映射到实际的.php文件上。服务器收到/xxx的请求时,默认只会找同名目录或静态文件,不会自动去解析xxx.php,这就是PHP代码不运行的原因。

修改后的完整.htaccess配置

RewriteEngine On

# 1. 外部重定向:把带.php/.html/index的URL跳转到不带扩展名的版本(301永久重定向)
RewriteCond %{THE_REQUEST} \s/+([^/.]+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

RewriteCond %{THE_REQUEST} \s/+([^/.]+)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

RewriteCond %{THE_REQUEST} \s/+([^/.]+)index[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

# 2. 内部重写:把不带扩展名的请求映射到对应的.php文件(仅内部处理,不改变URL)
# 排除真实存在的文件和目录,避免干扰静态资源(如图片、CSS、JS)或真实目录的访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/?$ $1.php [L]

关键修正说明

  1. 修正重定向规则的正则:原来的(\.+?)会错误匹配多个点,换成([^/.]+)可准确匹配不含斜杠和点的文件名。
  2. 添加内部重写规则:
    • RewriteCond %{REQUEST_FILENAME} !-f:过滤真实存在的文件(比如静态图片、CSS)
    • RewriteCond %{REQUEST_FILENAME} !-d:过滤真实存在的目录
    • RewriteRule ^([^/.]+)/?$ $1.php [L]:将不带扩展名的请求自动追加.php后缀,让服务器解析PHP脚本,[L]表示终止后续规则匹配。

额外注意事项

  • 确认Apache服务器已启用mod_rewrite模块。
  • 在Apache站点配置中,对应目录需设置AllowOverride All,否则.htaccess规则无法生效。

内容的提问来源于stack exchange,提问作者cass-dev27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:50:23