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

Использование .htaccess для скрытия файлов

Скажем, у меня есть index.php файл в моем общедоступном каталоге.

С помощью DirectoryIndex index.php, Я могу установить этот файл в качестве индекса по умолчанию на моем веб-сайте.

Но что, если я не хочу, чтобы пользователи заходили через www.example.com/index.php, только www.example.com, Как мне это сделать?

РЕДАКТИРОВАТЬ

Я добавил следующий код:

if (strpos($_SERVER['REQUEST_URI'], 'index.php')) {
    readfile('404.html');
    exit;
}

в начале index.php, так что вход по www.example.com/index.php приведет к ошибке 404, но ввод через www.example.com не будет (таким образом, не давая потенциальному злоумышленнику никакой информации о том, использую ли я PHP или нет). Не лучшее решение в мире, но работает.

Ваш вопрос не имеет смысла. Если вы хотите показать веб-страницу пользователю, который запрашивает www.example.com тогда должен быть DirectoryIndex какой-то.

DirectoryIndex index.php index.html 

заставит apache искать DocumentRoot сервера для index.php, а затем index.html и представить пользователю отрисованную версию первого найденного.

Вы не можете действительно "спрятать" страницу. Вы можете запретить доступ (что приводит к ошибке 403) с помощью htaccess. Вы также можете перенаправить с помощью mod_rewrite либо из /index.php (как предлагается) в /, либо из /index.php в ваш файл 404 (как вы делаете сейчас). Самым близким к скрытию страницы было бы использование mod_rewrite для перехода от index.php к /, поэтому, когда пользователи вводят www.example.com или www.example.com/index.php, он отображается как www.example. com

Вы можете "запретить" /index.php с чем-то вроде

<Location /index.php>
   Order deny,allow
   Deny from all
</Location>

Или перенаправьте из /index.php в / с помощью mod_rewrite (что немного удобнее для пользователя).

В вашем комментарии к Коосу я вижу, что вы хотите скрыть index.php, чего вы действительно не можете сделать. Лучше всего поместить части, которые вы хотите скрыть, в другой файл и включить этот файл в index.php. Если все сделано правильно, пользователь не увидит ни оператора include, ни включенного файла, только результат.