@wakh

Как проверить наличие каталога средствами .htaccess?

Дано.
  1. Хостинг nginx + apache 2.2.4
  2. Сабдомен, это важно т.к. в нём "не правильно" работает %{DOCUMENT_ROOT} она отдаёт путь к папке основного домена. t.wakh.ru (в прочем вариант с подпапкой wakh.ru/t тоже не сработал).
  3. Файлы для проверки:
    • /1.html
    • /1.shtml
    • /d1/2.html
  4. .htaccess следующего содержания
    AddHandler server-parsed .shtml
    
    Options -Indexes +FollowSymLinks +Includes
    RewriteEngine On 
    #RewriteOptions Inherit
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME}	(([^\/]+\/)*[^.]+)\.html
    RewriteCond %1.html 	!-f
    RewriteRule ^ 		1.shtml	[QSA,L,E=VARR:er]


Проблема:
  • при запросе t.wakh.ru/d1/2.html редирект не происходит, файл /d1/2.html существет - всё правильно
  • при запросе t.wakh.ru/d1/1.html редирект происходит, т.к. файла /d1/1.html нет - всё правильно
  • при запросе t.wakh.ru/d2/1.html редирект не происходит, хотя каталога d2 нет, соответственно и файла /d2/1.html тоже - Как это исправить?

Вариант с
RewriteCond %{REQUEST_FILENAME}	(([^\/]+\/)*[^.]+)\.html
RewriteCond %2	 	!-d

не сработал.
Я выяснил, что при отсутствии каталога не срабатывает RewriteCond %{REQUEST_FILENAME} (([^\/]+\/)*[^.]+)\.html

Если захотите помочь, не поленитесь создать подобную структуру на своём сервер/хостинге, в процессе тестирвания на моём возникло неадекватное поведение и нажатие на Ф5 хаотично выдавало разные результаты.

И ещё вопрос, в процессе тестирования я хотел использовать флаг env|E=[!]VAR[:VAL], но в нём оказывается пустое значение. Почему?
PS
Прошлый мой вопрос остался без ответа, вероятно в следствии сумбурности.
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
1. чтоб работало документ рут
RewriteBase /
2. в конфихаг nginx найди нет ли там что про .htnl
location  ~* \.(html|htm)$ {
  error_page 404 /404.html;
  expires 30d;

3. весь .htaccess в студию включая ЧПУ
4. нафига RewriteCond %{REQUEST_FILENAME} ?
используй RewriteCond %{REQUEST_URI}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы