创建 .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,但前提是您确认它有效(以避免潜在的缓存问题)。
我想重定向根目录中的所有 .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,但前提是您确认它有效(以避免潜在的缓存问题)。