2015-06-07 5 views
2

файл .htaccess сайта не имеет это существующая команда:Исключить глубокий подкаталог из .htaccess RedirectMatch

RedirectMatch 404 /directory(/|$) 

Исключение требуется, чтобы файлы из одного глубокого подкаталога доступны в том же время возвращается 404 для всех остальных файлов под каталогом. Путь к доступной директории:

/directory/sub/sub/sub/sub 

Если я закомментировать существующий RedirectMatch, файлы в подкаталоге доступны, но так и все другие содержимое каталога /. Я пытался сохранить в RedirectMatch и положить RewriteRule в верхней части файла .htaccess:

RewriteRule ^/directory/sub/sub/sub/sub/ - [L] 

Я попытался заменить на RedirectMatch с RewriteCond и RewriteRule:

RewriteCond %{REQUEST_URI} ^/directory/ 
RewriteCond %{REQUEST_URI} !^/directory/sub/sub/sub/sub/.*$ 
RewriteRule ^/directory/(.*)$ - [L,R=404] 

До сих пор ничего не было эффективным. Любые указатели?

ответ

1

Вы можете использовать отрицательный предпросмотр, чтобы исключить подкаталог, например, так:

RedirectMatch 404 /directory(?!/sub/sub/sub/sub) 

Вы также заметите, что я удалил чек на косую черту или конца строки. Причина в том, что каталоги всегда имеют косые черты (если только DirectorySlash не установлен в off). Кроме того, нет необходимости проверять конец пути, потому что вы все сопоставляете в directory и в подкаталоге (для исключения).

+1

Спасибо, Майк! Это отличный ответ и делает именно то, что мне нужно. Я бы повысил его, но у этой учетной записи не было необходимых 15 очков. –

+0

Добро пожаловать. –