.htaccess 无法重定向没有扩展名的 URL

.htaccess 无法重定向没有扩展名的 URL

我有一些 URL(从外部链接)没有扩展名,例如

www.example.com/main

最初,服务器的根目录中有文件main.htm和。main.html

然而,

RewriteRule ^main$ main.html [L,R=301]

不起作用。

服务器根目录中没有文件夹main/或文件。main

文件中还有其他条目.htaccess可以正常工作,因此我确信 RewriteMod 已启用并正常工作。我还有针对拼写错误的重写规则(www.example.com/xyz)可重定向到该规则的链接)。

RewriteRule ^xyz\)$ xyz/index.html [L,R=301]

有趣的是,www.example.com/mainURL 在浏览器中保持不变(浏览器栏中的 URL 不会改变(就像重定向一样)),但页面会显示文件的内容main.de.html。如果我创建一个名为的文件,main.da.html它就会显示该内容(但仅在 apache 重新启动后)。

我不知道它是如何到达那里或如何将它重定向到main.html

答案1

在文件顶部禁用 MutliViews .htaccess

Options -MultiViews

MultiViews(mod_negotiation 的一部分)通常搜索对于与基本名称匹配的物理文件main(在本例中为基本名称,并将使用适当的 mime 类型进行响应)。这种情况会发生因此,如果您有一个名为的文件main.de.html,则在 mod_rewrite 有机会处理之前,它将作为内部子请求(无重定向)提供。

(但只有在 apache 重启后才可以)。

这通常不需要重新启动 Apache。尽管可能正在进行一些缓存。(?)

RewriteRule ^main$ main.html [L,R=301]

RewriteBase另外:除非您有现有指令(我假设您一定有),否则这不太可能作为外部重定向有效?否则您应该在代换以斜线表示。即/main.html(如果文件位于文档根目录中)。

www.example.com/main URL 在浏览器中保持不变

如果问题不是多视图,那么可能是该指令在配置文件中的位置不正确,并且其他指令可能存在冲突。我们需要查看您的.htaccess文件。

相关内容