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

Apache中移除.html与.php扩展名问题求助

解决无扩展名请求PHP页面返回404的Rewrite规则问题

我来帮你搞定这个问题!先看你给出的规则,核心问题出在条件语法错误和未完成的规则上,导致PHP的重写逻辑根本没生效。

原规则的问题点

  1. 条件缺少空格:比如RewriteCond %{REQUEST_FILENAME}!-d这里,%{REQUEST_FILENAME}和!-d之间没有空格,Apache无法正确解析这个条件判断,直接跳过了后续的PHP重写规则。
  2. PHP规则未完成:你贴的代码里PHP部分的RewriteRule ^(....明显没写完,正确的匹配模式应该是^(.*)$。
  3. -F标志的潜在问题:-F会检查文件是否存在且可被服务器访问,有时候可能因为权限或上下文限制,不如-f(仅检查普通文件存在)稳定。

修正后的完整Rewrite规则

把下面的代码替换你现有的规则,就能同时处理.html和.php的无扩展名请求:

RewriteEngine On

# 处理无扩展名请求 → 对应.html文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]

# 处理无扩展名请求 → 对应.php文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

规则详解

  • RewriteCond %{REQUEST_FILENAME} !-d:确保请求的不是真实存在的目录,避免把目录请求错误重写到文件。
  • RewriteCond %{REQUEST_FILENAME}\.html -f:检查当前请求路径加上.html后缀后,对应的文件是否真实存在。
  • RewriteRule ^(.*)$ $1.html [L]:将无扩展名的请求重写到带.html的文件,[L]表示匹配到这条规则后就停止后续规则执行,避免冲突。
  • PHP部分的逻辑和HTML完全一致,只是后缀换成.php。

额外注意事项

  • 确保你的Apache服务器已经启用了mod_rewrite模块。
  • 确保存放.htaccess的目录在Apache配置中设置了AllowOverride All或AllowOverride FileInfo,否则Rewrite规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:09