Перенаправление .htaccess - как и в какой каталог? - PullRequest
0 голосов
/ 16 августа 2011

У меня есть структура каталогов "как" это

  • Root
    • Sub Dir A
    • Содержимое
    • Admin

И у меня есть несколько файлов в Admin, которые мне нужно запретить .htaccess.Я знаю, что они должны быть вне корня, но в этой ситуации я не могу.Каков правильный синтаксис для htaccess для перенаправления прямого запроса, скажем, «Sub Dir A / Admin / abc.php» (скажем, запрещенный файл) обратно, чтобы сказать «Sub Dir A / Admin / index.php» - просто пример.Заметьте, что «abc.php» может быть включением, поэтому это должен быть только прямой запрос.Ой забыл спросить, в какую директорию поместить файл .htaccess в

1 Ответ

1 голос
/ 16 августа 2011

Если вы действительно хотите сделать это с mod_rewrite, тогда правило может быть:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteRule ^abc\.php$ http://www.example.com/subdir_a/admin/index.php [R=301,L]

Это приведет к 301 постоянному перенаправлению, если вы попытаетесь получить прямой доступ к abc.php.

Это должно быть в .htaccess в папке /subdir_a/admin/.

Если вы хотите - вы можете поместить его в файл .htaccess в корневой папке веб-сайта - затем немного измените правило перезаписи, указав путь к abc.php:

RewriteRule ^subdir_a/admin/abc\.php$ http://www.example.com/subdir_a/admin/index.php [R=301,L]

В качестве альтернативы вы можете выдать 403 Отказ в доступе:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteRule ^abc\.php$ - [F,L]

Обычной практикой является не ретранслировать .htaccess и mod_rewrite (которые могут быть недоступны на некоторых планах общего хостинга или отключены по соображениям производительности) и использовать проверки на стороне PHP-Script:

1. Для размещения во включенном / защищенном файле (например, abc.php):

if (!defined('ENTRY_POINT_MARK')) {
    header('HTTP/1.1 403 Access Denied', true, 403);
    exit();
}

2. Для помещения в скрипт вызова / мастера (доступ к которому можно получить напрямую):

define('ENTRY_POINT_MARK', 'EntryPointMark');
...