Директивы .htaccess. Подскажите, где ошиблась.

[Удален]
937

Мне нужно написать такие директивы, чтобы при обращении к любому файлу на сервере запускался скрипт script.php. Но есть исключения, скрипт не должен запускаться при обращении к файлам с расширениями .txt, .swf, .flv, .ico а так же при обращении к несуществующим файлам.

Погуглила, почитала, но как-то это все сложновато для меня.

По моим понятиям должно работать вот так:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule \.flv$ - [L]

RewriteRule \.ico$ - [L]

RewriteRule \.swf$ - [L]

RewriteRule \.txt$ - [L]

RewriteRule ^(.*)$ script.php [L]

Но в таком варианте обращения к несуществующим файлам тоже передаются скрипту.

Подскажите, в чем ошибка?

V
На сайте с 25.07.2006
Offline
128
#1

RewriteCond действует только на один следующий RewriteRule

Приватный linux-администратор
D
На сайте с 11.05.2010
Offline
15
#2

Попробуйте так:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule \.(flv|ico|swf|txt)$ - [L]

RewriteRule ^(.*)$ script.php [L]

С напильником и бубном (http://kaba.org.ua)
[Удален]
#3
delicate:
Попробуйте так:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(flv|ico|swf|txt)$ - [L]
RewriteRule ^(.*)$ script.php [L]

Попробовала. Не работает.

Все запросы к несуществующим файлам передаются скрипту.

Работающим как нужно оказался вариант если поменять местами вторую и третью строки

RewriteEngine on

RewriteRule \.(flv|ico|swf|txt)$ - [L]

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule ^(.*)$ script.php [L]

Но правильно ли так писать? Во второй строке получается правило без условия.

Гуру, прокомментируйте пожалуйста. Разобраться хочется.

D
На сайте с 11.05.2010
Offline
15
#4

ну если работает - то нормально :)

=DEREK=
На сайте с 07.05.2009
Offline
130
#5

Да тут два условия и одино правило нужно, а не наоборот. Что-то в духе


# Проверяем не имеет ли файл ненужного нам расширения
RewriteCond %{REQUEST_URI} !.*\.(flv|ico|swf|txt)
# Дальше проверяет существует ли запрашиваемый файл
RewriteCond %{REQUEST_FILENAME} -f
# И если два кондишина положительны, то выполняем рул
RewriteRule ^(.*)$ script.php [L]
Показываю фокусы с Drupal (/ru/forum/526565)
D
На сайте с 11.05.2010
Offline
15
#6

=DEREK= если будет 404 ошибка, то пойдет на обработку через скрипт.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий