我有一些url(从外部链接),没有扩展名,例如
www.example.com/main
最初在服务器的根目录中有main.htm和main.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的一部分)通常会search与main (本例中)匹配的物理文件作为基本名称(并以适当的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文件。