2011-12-26 5 views
1

У меня есть регулярное выражение, которое перенаправляет любые файлы в папке «/ downloads» на PHP-скрипт, который затем обслуживает файл (наряду с другими материалами). Тем не менее, я хотел бы иметь некоторые файлы PHP, которые я могу просматривать, и не загружать их (также, очевидно, проблема безопасности). Однако я не знаю, что такое регулярное выражение. Я ищу нито это, но не получить его прямо :(Регулярное выражение Исключить конкретные файлы

<IfModule mod_rewrite.c> 
RewriteEngine on 

#Redirect any file coming in to the downloads manager 
RewriteRule ^(.+\.*) /downloads?file=$1 [R,L] 
</IfModule> 

Единственное, что я могу найти так далеко, что может работать в RewriteRule ^(.+\.php)$ - [L]. Однако, это не работает. Если кто-то может быстро объяснить это, или дайте мне что-нибудь, что сработает, это будет здорово!
Кроме того, поскольку вы, возможно, выяснили, что это перенаправляет на index.php из папки/downloads. Если бы вы могли объяснить, почему он не загружает себя, это будет Отлично. Он загружается, когда я иду на скачивание/index.php, но не просто/скачивает. Не требуется информация, чтобы заставить его работать, но хотелось бы знать :)
Спасибо за любые ответы.

+0

В вашем 'RewriteRule', вы имеете в виду '. + \. *' или '. + \ .. *'? Первый ищет любую строку, заканчивающуюся на 0 или более периодов, в то время как вторая ищет какую-либо строку конкретно с периодом в ней (например, расширение)? –

+0

Является ли код перезаписи, который вы отправили в файле apache 'httpd.conf', или находится в файле' .htaccess'? И если его в '.htaccess' является этот файл в каталоге'/downloads' или он находится в корне? Пожалуйста, уточните свой вопрос. Кроме того, какие файлы в '/ downloads' обрабатываются по-разному? Как бы то ни было, вопрос слишком расплывчатый, чтобы быть точным ответом. – ridgerunner

+0

Это .htaccess, в/downloads. Файлы PHP не должны быть затронуты (не загружены). Если позже я могу добавить другие типы файлов или определенные файлы, отлично. Извините за то, что вы недостаточно ясны! –

ответ

0

Используйте RewriteCond запретить матчи вы не хотите:

RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule (.*) /downloads?file=$1 [R] 

(я удалил L, так как у него не было никакого использования здесь)

+0

Верхняя линия отлично работает. Однако нижняя строка создает бесконечный цикл, когда я просто посещаю/downloads /. Моя старая версия должна была работать, когда что-то имело формат «\ *. \ *», Как я бы это знал. Имя файла и расширение. Кажется, что он работает с 'RewriteCond% {REQUEST_URI}! \. Php $ RewriteRule^(. + \. *)/Downloads? File = $ 1 [R, L]', кроме посещения/downloads/folder. Он пытается загрузить папку. –

+0

Просто используйте 'RewriteRule (. *) /downloads.php?file=$1 [R]' для предотвращения цикла. – Gerben

Смежные вопросы