В основном я размещаю статический 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]
Однако, когда я объединяю эти два правила, очевидно, что они создают цикл перенаправления. Есть ли способ обойти это?
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
.