Ter*_*ity 3 mod-rewrite apache-2.4
我有一些没有扩展名的 URL(从外部链接),例如
www.example.com/main
Run Code Online (Sandbox Code Playgroud)
最初有文件main.htm
和main.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/main
URL 在浏览器中显示不变(浏览器栏中的 URL 不会更改(与重定向一样)),但页面会显示文件的内容main.de.html
。如果我创建一个名为 it 的文件,main.da.html
则会显示该内容(但仅在 apache 重新启动后)。
我不知道它是如何到达那里或如何将其重定向到main.html
.
禁用文件顶部的 MutliViews .htaccess
:
Options -MultiViews
Run Code Online (Sandbox Code Playgroud)
MultiViews(mod_negotiation 的一部分)通常会搜索匹配main
(在本例中)作为基本名称的物理文件(并且会以适当的 mime 类型进行响应)。这发生在 mod_rewrite之前。因此,如果您有一个名为 的文件main.de.html
,则在 mod_rewrite 有机会处理之前,它将作为内部子请求(无重定向)。
(但仅在 apache 重新启动后)。
这通常不需要重新启动 Apache。尽管可能正在进行一些缓存。(?)
Run Code Online (Sandbox Code Playgroud)RewriteRule ^main$ main.html [L,R=301]
旁白:这不太可能作为外部重定向有效,除非您有现有的RewriteBase
指令(我认为您必须有)?否则,您应该在替换前加上斜杠。IE。/main.html
(如果文件位于文档根目录中)。
www.example.com/main URL 在浏览器中显示不变
如果 MulitViews 不是问题所在,则可能是该指令位于配置文件中的错误位置,并且其他指令可能存在冲突。我们需要查看您的.htaccess
文件。
归档时间: |
|
查看次数: |
2242 次 |
最近记录: |