基本上,我托管一个静态 HTML 网站,我需要:
http://example.com/some-direcory/index.html
重定向至:
http://example.com/some-direcory
同时仍将代表该内容的物理文件存储在:
http://example.com/some-direcory/index.html
以下是我所拥有的:
# rewrite /dir/file to /dir/file/index.html
RewriteRule ^([\w\/-]+)(\?.*)?$ $1/index.html$2 [L,T=application/x-httpd-html]
这似乎可以很好地满足我上述的 #2 个需求,然后我可以用这个来满足我上述的 #1 个需求:
# rewrite /dir/file/index.html to /dir/file
RewriteRule ^(.*)/index\.html$ /$1 [R=301,L,C]
但是,当我将这两条规则组合在一起时,它们显然会创建一个重定向循环。有什么方法可以解决这个问题吗?
答案1
RewriteCond "%{THE_REQUEST}" "\s(/[\w/-]+?)/index\.html[?\s]"
RewriteRule "^" "%1" [R=301,L,C]
RewriteCond "%{DOCUMENT_ROOT}/$1/index.html" -f
RewriteRule "^([\w/-]+[^/])$" "/$1/index.html" [L,T=application/x-httpd-html]
注意DirectorySlash
可能的问题。