Если файл *.log существует - запретить доступ, если не существует - обработать скрипт

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Holy Diver, 17 сен 2009.

Статус темы:
Закрыта.
  1. Holy Diver

    Holy Diver Создатель

    Регистр.:
    17 авг 2009
    Сообщения:
    22
    Симпатии:
    8
    Есть .htaccess с содержанием:
    Код:
    <Files ~ "\.(xml|log)$">
    	deny from all
    </Files>
    
    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(gif|jpg|png|js|swf|zip|tgz|txt)$ pages.php
    
    RewriteRule ^$ index.php [L]
    Делаю мегакрутой модреврайт.

    Допустим, есть файлы log1.log, log2.log, data.xml, pic.png, meta.html

    При запросе файлов log1.log, log2.log, data.xml - вылезает ошибка Forbidden, то что нужно!

    При запросе файла pic.png открывается картинка, то что нужно!

    При запросе файла meta.html показывается этот же файл, то что нужно!

    При запросе файла bum-bum.html вывод генерируется скриптом index.php, то что нужно!

    Но, при запросе несуществующего файла log3.log выдаётся ошибка Forbidden, а хотелось бы чтобы обработка передавалась скрипту index.php.

    Если кратко, хочу чтобы для всех существующих файлов с расширениями xml или log выдавался Forbidden, а если файл не существует - передавать обработку скрипту index.php. Все остальные существующие файлы должны выдаваться так как есть. Все остальные несуществующие файлы передавать на обработку скрипту index.php

    Методом тыка и чтения документации сделать такое не удалось, помогите кто чем может =)
     
  2. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    убери блок files? и замени на такое
    Код:
    Options -Indexes
    Options +FollowSymlinks
    RewriteEngine On
    # если файла *.log нет, то грузим 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.log$ index.php [L]
    # если такой файл есть, то подменяем его на код 403
    RewriteRule ^(.+)\.log$ 403.php [L]
    
    В файле 403.php отдаешь заголовок, что доступ не разрешен и пишешь текст
    PHP:
    <?
    header ("HTTP/1.0 403 Forbidden"); 
    ?>
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>403 Forbidden</title>
    </head><body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access *.log on this server.</p>
    <hr>
    <address>Apache Server at </address>
    </body></html>
     
    Holy Diver нравится это.
Статус темы:
Закрыта.