当提供某个“物理”(静态)文件时,.htaccess
是否可以将某个URI重定向/重写(301)?最初提供此文件的URI应该无关紧要。
在example.com
的文档根目录中有一个文件index.html
。可以使用不同的URI(取决于服务器配置)访问此文件,例如:
http://example.com/
http://example.com/index
http://example.com/index.html
http://example.com/index.html?foo=bar
http://example.com///////////index.html
使用像RewriteRule file(index.html) http://example.com/ [R=301,L]
这样的(伪!)规则,我可以指定此文件的规范URI,而不必考虑所有可能的URI变体。
答案 0 :(得分:1)
如果您要将这些网址中的任何一个重定向到http://example.com/
,以下内容将有效。
RewriteRule ^index(\.html)?$ http://example.com/ [R=301,L]
(\.html)?
部分是.html
的正则表达式懒惰匹配,这意味着http://example.com/index
和http://example.com/index.html
都匹配。如果您只想从所有可能的index.html
请求重定向,则可以省略延迟搜索,如下所示:
RewriteRule ^index\.html$ http://example.com/ [R=301,L]
答案 1 :(得分:1)
从/
到index.html
的透明重定向由mod_dir通过DirectoryIndex
指令操作
如果要重定向,可以使用DirectoryIndexRedirect
指令:
DirectoryIndexRedirect permanent
这会对您要实现的效果产生相反的效果,因为它会将http://example.com/重定向到http://example.com/index.htm
从index
到index.html
的透明重定向由+MultiViews
选项操作,此选项已在您的Apache配置或.htaccess文件中设置:
Options +MultiViews
没有用于使用HTTP 301代码发出此重定向的配置变量。
您可以使用变量DirectoryIndex
检测Apache内容协商和SCRIPT_FILENAME
选择的文件。如果这恰好是索引文件,您可以删除最后一个/如果有的
RewriteCond expr "%{SCRIPT_FILENAME} -strmatch '*/index.*'"
RewriteRule (.*/)?(.*) $1 [R=301]