RewriteCond просто не работает, не проверяет должным образом, существует ли файл - PullRequest
0 голосов
/ 12 мая 2010

Я пытался решить эту проблему часами, но ничего не придумал.

Внутри .htaccess, когда кто-то запрашивает изображение из папки моего сайта, я пытаюсь проверить, существует ли файл с таким же именем в другой папке; если это так, верните этот файл; если это не так, верните первоначально запрошенный файл.

Кажется, это так просто, но просто не работает. Код .htaccess выглядит следующим образом:

RewriteEngine On

RewriteCond /images/blog/watermark/$1 -f
RewriteRule ^(.*) /images/blog/watermark/$1

«RewriteCond» всегда возвращает отрицательное значение, поэтому запрашиваемое изображение всегда загружается как есть. Если я изменю его на

RewriteCond %{REQUEST_FILENAME} -f

он всегда возвращает положительный результат, поэтому он получает изображение из нужной мне папки - кроме случаев, когда изображение отсутствует, генерируя ошибку, что я и пытаюсь предотвратить.

Что я делаю не так?

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Я понял!

Очевидно, что RewriteCond нужна вся структура каталогов для правильной проверки существования файла.

Я добавил% {DOCUMENT_ROOT} до того пути, который у меня был ранее в моем RewriteCond, и он работал.

Кроме того, после дальнейшего прочтения документации я заметил, что первая группа имеет значение $ 0, а не $ 1 при обратной ссылке в RewriteRule.

Итак, окончательный код выглядит следующим образом:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/images/blog/watermark/$0 -f 
RewriteRule ^(.*) /images/blog/watermark/$1 
1 голос
/ 12 мая 2010

У вас неправильный синтаксис для RewriteCond.Возможно, вы захотите сделать что-то более похожее на это:

RewriteCond ^/images/blog/watermark/(.*) -f

В этом случае $1 на самом деле не существует, поскольку RewriteCond принимает регулярное выражение, а не строку замены.Итак, Apache ищет /images/blog/watermark/$1 вместо любого файла внутри /images/blog/watermark/.

Для справки: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteCond

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...