我有一些没有扩展名的 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
.
在文件顶部禁用 MutliViews
.htaccess
:MultiViews(mod_negotiation 的一部分)通常会搜索匹配
main
(在这种情况下)作为基本名称的物理文件(并会以适当的 mime 类型响应)。这发生在mod_rewrite 之前。因此,如果您有一个名为 的文件main.de.html
,它将在 mod_rewrite 有机会处理之前作为内部子请求(无重定向)。这不是通常需要重新启动 Apache 的事情。尽管可能正在进行一些缓存。(?)
旁白:这不太可能作为外部重定向有效,除非你有一个现有的
RewriteBase
指令(我假设你必须有)?否则,您应该在替换前加上斜杠。IE。/main.html
(如果文件位于文档根目录中)。如果 MulitViews 不是问题,则可能是该指令在配置文件中的位置错误,并且其他指令可能存在冲突。我们需要查看您的
.htaccess
文件。