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

Ter*_*ity 3 mod-rewrite apache-2.4

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

www.example.com/main
Run Code Online (Sandbox Code Playgroud)

最初有文件main.htmmain.html在服务器的根目录中。

然而,一个

RewriteRule ^main$ main.html [L,R=301]
Run Code Online (Sandbox Code Playgroud)

不起作用。

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

文件中还有其他条目.htaccess可以正常工作,因此我确信 RewriteMod 处于活动状态并且可以正常工作。我还有拼写错误的重写规则(www.example.com/xyz)可以重定向该链接。

RewriteRule ^xyz\)$ xyz/index.html [L,R=301]
Run Code Online (Sandbox Code Playgroud)

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

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

MrW*_*ite 5

禁用文件顶部的 MutliViews .htaccess

Options -MultiViews
Run Code Online (Sandbox Code Playgroud)

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

(但仅在 apache 重新启动后)。

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

RewriteRule ^main$ main.html [L,R=301]
Run Code Online (Sandbox Code Playgroud)

旁白:这不太可能作为外部重定向有效,除非您有现有的RewriteBase指令(我认为您必须有)?否则,您应该在替换前加上斜杠。IE。/main.html(如果文件位于文档根目录中)。

www.example.com/main URL 在浏览器中显示不变

如果 MulitViews 不是问题所在,则可能是该指令位于配置文件中的错误位置,并且其他指令可能存在冲突。我们需要查看您的.htaccess文件。