使用 mod_rewrite 和 apache2 从同一个 url 重定向并为其设置别名?

使用 mod_rewrite 和 apache2 从同一个 url 重定向并为其设置别名?

基本上,我托管一个静态 HTML 网站,我需要:

  1. http://example.com/some-direcory/index.html
    重定向至:
    http://example.com/some-direcory

  2. 同时仍将代表该内容的物理文件存储在:
    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可能的问题。

相关内容