![.htaccess 无法重定向没有扩展名的 URL](https://linux22.com/image/695138/.htaccess%20%E6%97%A0%E6%B3%95%E9%87%8D%E5%AE%9A%E5%90%91%E6%B2%A1%E6%9C%89%E6%89%A9%E5%B1%95%E5%90%8D%E7%9A%84%20URL.png)
我有一些 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/main
URL 在浏览器中保持不变(浏览器栏中的 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
文件。