您正在搜索的答案在这里:.htaccess 文件扩展名删除不起作用(尝试了很多解决方案)
查看接受的答案,它基于 .shtml 文件扩展名。您必须为要使用的每个文件扩展名复制这些规则,并将 .shtml 替换为文件扩展名。
注意:如果您有两个文件index.html和index.php,并且您使用 .php 和 .html 的规则,则只有第一个匹配项有效。所以为不同的文件选择不同的文件名。
RewriteEngine on
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s.+\.html [NC]
RewriteRule ^(.+)\.html$ /$1 [R=301,L,NC]
# To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule . %{REQUEST_URI}.html [L]
# To externally redirect /dir/foo.htm to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s.+\.htm [NC]
RewriteRule ^(.+)\.htm$ /$1 [R=301,L,NC]
# To internally redirect /dir/foo to /dir/foo.htm
RewriteCond %{REQUEST_URI} !\.htm$ [NC]
RewriteCond %{REQUEST_FILENAME}.htm -f
RewriteRule . %{REQUEST_URI}.htm [L]
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC]
# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_URI}.php [L]
另请注意,这仍然是一种“低效”。对于发送到服务器的每个请求,例如 /file,它首先会尝试查找 file.html。如果它没有找到它,它将寻找 file.htm。如果它没有找到它,它将寻找file.php。只有在它没有找到file.php之后,404才会跟随。对于为文件扩展名添加更多过滤器,效率会增加。