创建 .htaccess 重定向规则以删除从根目录而非子目录提供的文件扩展名?

Create .htaccess redirect rule that removes an extension of files served from the root but not sub-directories?

我想重定向根目录中的所有 .htm 文档(即 www.example.com/page.htm)以删除扩展名(即 www.example.com/page/)但不重定向 .htm 文档在子目录中(即 www.example.com/subdir/page.htm)。

.htaccess 中是如何完成的?

在根 .htaccess 文件的顶部, 现有 WordPress 指令之前(即在 # BEGIN WordPress 之前)尝试类似以下内容。

# Redirect "/<page>.htm" to "/<page>/"
RewriteRule ^([^./]+)\.htm$ // [R=302,L]

您无需重复 RewriteEngine 指令,因为这已在 WordPress 指令的后面出现。 (RewriteEngine 指令的顺序无关紧要 - 最后一个 实例“获胜”。)

这仅从根目录中的任何请求的 URL 中删除 .htm 扩展名,并附加一个尾部斜杠(如您的示例所示)。这也假设 <page> 本身不包含点。

请注意,这是 302(临时)重定向。如果这是永久性的,则将其更改为 301,但前提是您确认它有效(以避免潜在的缓存问题)。