Назад | Перейти на главную страницу

htaccess: разрешить доступ к файлу только по полному пути, а не по перезаписанному

В моих настройках моя CMS находится в подпапке / подпапке, и я переписываю весь доступ к корню в эту подпапку:

## Rewrite www.example.com to the CMS home page: www.example.com/corporate/index.php
RewriteRule ^$ sub/index.php [L]

## Let the CMS process paths like www.example.com/corporate/about
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sub/(.*)$ sub/index.php?q=$1 [L,QSA]

## Search for real CMS files that moved, 
##  (e.g. www.example.com/flash/intro.swf to www.example.com/corporate/flash/intro.swf)
RewriteCond %{DOCUMENT_ROOT}/sub/$1 -f
RewriteRule ^(.*)$ sub/$1 [L]

## Let CMS process all paths that are not real files and directories, like www.example.com/about
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ sub/index.php?q=$1 [L,QSA]

Итак, теперь в CMS есть файл, который я хотел бы иметь возможность вызывать по соображениям безопасности, но я не хочу, чтобы этот файл был доступен из корня по соображениям безопасности. Так,

www.example.com/maintnance

НЕ должен работать

www.example.com/sub/maintnance

Должно сработать.

Можно ли это сделать с .htaccess?

Это возможно - вам просто нужно добавить специальное правило для этого файла перед вы перейдете к остальной части перезаписи. Например.:

RewriteRule /maintnance$ - [F,L]

говорит, что если имя файла - "/ maintnance", не перезаписывайте - вместо этого дайте ответ 403 Forbidden и прекратите перезапись.

Но это не очень безопасно. На вашем месте я бы использовал некоторую форму управления доступом, основанную либо на IP-адресе, либо на аутентификации.