В mod rewrite как правильно использовать подзапрос?

сайт на чистом html! ( спалили с жумулы ибо старый и чистить такие сайты уже задолбались)
Накидал по быстрому .htaccess
RewriteEngine on
RewriteBase /

#убираем инексы как на главнй так и возможные в каталогах.
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.*)/index\.(html|htm)$
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)$ %1 [NC,L,R]


#удаляем всем остальным 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.html
RewriteRule (.*)\.html$ /$1 [L,R]

#поскольку реально таких урлов нет нужно  как-то отработать
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^([^.]+)$ $1.html [NC,L]


Все работает до момента когда попадается
/catalog.html
и
/catalog

Нужно:
Если есть файл catalog.html запустить его при сохранение урал /catalog
При текущей конфигурации апачь не может отдать /catalog/.html
У mod_rewrite есть проверки подзапросами притом их целых 3, и даже можно сделать через пропуск условия, но настолько мало примеров что вообще понять логику невозможно.
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dodo512
Обычно включен mod_dir, который делает редирект с /catalog на /catalog/, если это существующий каталог. Т.е. нужен DirectorySlash Off, чтобы не было /catalog/.html
DirectoryIndex index.html
DirectorySlash Off

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^GET\ ([^?]*?)(/index)?\.htm
RewriteRule ^ %1 [L,R,NE]

RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.]+)$ $1.html [L]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы