如何在.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
相关产品推荐
相关产品推荐

