.htaccess不能redirect的URL没有扩展名

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

www.example.com/main 

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

但是,一个

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

不起作用。

在服务器根目录下没有文件夹main/也没有名为main的文件。

.htaccess文件中还有其他一些条目可以工作,所以我确信RewriteMod是有效的并且正在工作。 我还重写了可redirect的拼写错误规则(指向www.example.com/xyz)的链接www.example.com/xyz)

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

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

我无法弄清楚它是如何到达那里或如何将其redirect到main.html

.htaccess文件顶部禁用MutliViews:

 Options -MultiViews 

MultiViews(mod_negotiation的一部分)通常会searchmain (本例中)匹配的物理文件作为基本名称(并以适当的MIMEtypes进行响应)。 这发生 mod_rewrite 之前 。 所以,如果你有一个名为main.de.html的文件,在mod_rewrite有机会处理之前,这个文件将作为一个内部子请求(不redirect)。

(但只有在apache重新启动后)。

这不是通常需要重启Apache的东西。 虽然可能有一些caching正在进行。 (?)

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

另外:除非你有一个现有的RewriteBase指令(我认为你必须有),否则这不太可能作为外部redirect。 否则,你应该用斜线前缀替代 。 即。 /main.html (如果该文件在文档根目录中)。

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

如果MulitViews不是问题,那么可能是指令位于configuration文件的错误位置,其他指令可能相冲突。 我们需要看到你的.htaccess文件。