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

Apache环境下隐藏PHP扩展名后重定向失效问题求助

解决Apache本地环境下隐藏.php扩展名后登录重定向失败的问题

你的问题核心出在硬编码绝对URL的重定向规则和缺少对真实文件/目录的过滤上,咱们一步步来修复:

问题拆解

  1. 第一条RewriteRule里用了http://localhost/project_test/production/$1这种硬编码绝对路径,这会导致重定向路径和实际项目结构不匹配(比如你的项目是project_test,但规则里硬加了production子目录,若不存在这个目录必然失败)。
  2. 第二条规则直接把所有不含.的请求转成.php,但如果有真实存在的目录、静态文件(比如css/js),会被错误重写;同时登录后后端重定向到portal.php时,会触发第一条规则的301重定向,但路径因硬编码出错。

修正后的.htaccess代码

RewriteEngine On

# 1. 外部重定向:把用户输入的带.php的URL永久转成不带的(用相对路径,避免硬编码)
RewriteCond %{THE_REQUEST} ^GET\ /project_test/(.+)\.php([#?].*)?\ HTTP/
RewriteRule ^(.+)\.php$ /project_test/$1 [R=301,L]

# 2. 内部重写:把不带.php的请求映射到对应.php文件(排除真实存在的文件/目录)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)$ $1.php [L]

# 3. 访问项目根目录时自动跳转到login(对应login.php)
RewriteRule ^$ login [L,R=302]

关键修改说明

  • 移除硬编码绝对URL:改用相对路径/project_test/$1重定向,不管本地域名或项目路径怎么变,都能适配。
  • 过滤真实文件/目录:添加!-f和!-d条件,确保只有不存在的文件/目录才会被重写成.php,避免干扰静态资源或真实目录的访问。
  • 明确根目录跳转规则:单独配置根目录到login的跳转,比依赖默认索引页更可靠,测试阶段用302临时重定向,确认无误后再改成301永久重定向。

额外注意点

  • 确保Apache已开启mod_rewrite模块,且在httpd.conf里设置了AllowOverride All(允许.htaccess生效)。
  • 后端登录逻辑的重定向目标要改成portal而非portal.php,这样直接触发内部重写,避免不必要的301跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:02