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

如何在.htaccess规则中移除PHP/HTML扩展名并排除指定PHP文件

解决.htaccess排除特定PHP文件的扩展名移除问题

我来帮你搞定这个问题~要排除特定的PHP文件(比如mailscript/sendmail.php)不被移除扩展名,关键是要把排除规则放在所有重写规则的最前面,因为Apache的Rewrite规则是从上到下顺序匹配的,匹配到带[L]标记的规则就会停止后续处理。

下面是调整后的完整.htaccess规则,我会逐一解释修改点:

AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
AddHandler server-parsed .html .htm

RewriteEngine on

# 1. 排除mailscript/sendmail.php的重定向(不让它跳转到无扩展名的URL)
RewriteCond %{THE_REQUEST} /mailscript/sendmail\.php [NC]
RewriteRule ^ - [L]

# 2. 排除mailscript/sendmail自动补全.php后缀
RewriteCond %{REQUEST_URI} ^/mailscript/sendmail$ [NC]
RewriteRule ^ - [L]

# 原有的.html扩展名移除规则
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

# 原有的.php扩展名移除规则(补充排除条件,跳过sendmail.php)
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteCond %{REQUEST_URI} !^/mailscript/sendmail\.php$ [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !^/mailscript/sendmail$ [NC]
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

关键修改说明:

  • 第一条排除规则:当用户直接访问mailscript/sendmail.php时,这条规则会匹配到,RewriteRule ^ - [L]表示不做任何重写,直接停止后续规则处理,避免它被重定向到无扩展名的URL。
  • 第二条排除规则:当用户访问mailscript/sendmail时,阻止系统自动给它加上.php后缀,确保不会反向映射到mailscript/sendmail.php。
  • 原PHP规则的补充条件:在原有的.php重定向和补全规则前,分别添加了反向匹配条件,明确跳过mailscript/sendmail.php和mailscript/sendmail路径,确保特定文件不受扩展名移除规则影响。

这样调整后,除了mailscript/sendmail.php之外,其他所有.html和.php文件都会正常移除扩展名,而特定文件保持原有URL不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:10