ugodrus2016-03-04 14:05:47
Apache HTTP Server
ugodrus, 2016-03-04 14:05:47

Apache 2.4 mod_rewrite why doesn't check for file existence work?

Faced a strange problem.
There is an .htaccess with the following content:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$
RewriteCond %{DOCUMENT_ROOT}/assets/thumbs/thumb.inc/%2.inc.php –f 
RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.%5 –f
RewriteRule ^(.*)$ assets/thumbs/thumb.php [L,QSA]

I used such constructions on many servers and everything worked.
Briefly describe the action of the directives:
if the requested file (image thumbnail) is not found in the file system
and the requested URL matches the regular pattern , we
check for the presence of a file with the rules for transforming the original image
and check for the presence of the source itself;
if all conditions are met, we launch the miniaturizer.
And so I can not understand in any way why two last RewriteCond do not work though files are present.
Tried all possible route manipulations. Fundamentally does not find files and gives a 404 error.
The brain is broken. I'm waiting for help.

Answer the question

In order to leave comments, you need to log in

3 answer(s)
ugodrus, 2016-03-04

That's the joke. After the first 2 lines I send to the designated php with the addition of substitutions from the rules that do not work in the query string .. live absolute routes come to the script. And -f works with absolute routes but doesn't work..
Ответ на вопрос оказался довольно простым: закрались опечатки точнее кривые символы визуально не очень заметные.
И может быть давно бы эту проблему решил если бы Apache 2.2 смог мне ее показать в RewriteLog.
Косяк был замечен после того, как перешел на 2.4 и попытки запустить RewriteLog. Самое весёлое что до этого в логе эти опечатки не упоминались.
А всё оказалось слишком просто.

RewriteEngine On

RewriteBase /

# Если нет запрашиваемого файла
RewriteCond %{REQUEST_FILENAME} !-f

# Если URI к нему соответствует шаблону
RewriteCond %{REQUEST_URI} ^/([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$

# Если представлен файл оригинального изображения и полностью соответствуют имя и расширение
RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.%5 -f

# Или представлен файл оригинального изображения с таким же именем но с другим расширением
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.jpg  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.jpeg -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.tif  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.tiff -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.gif  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.bmp  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.png  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.svg  -f [OR]
#RewriteCond %{DOCUMENT_ROOT}/%1%3/%4.svgz -f

# А также имеется правило преобразования для миниатюризатора в виде php файла в указанной директории
RewriteCond %{DOCUMENT_ROOT}/assets/thumbs/thumb.inc/%2.inc.php -f 

RewriteRule ^(.*)$ assets/thumbs/thumb.php [L,QSA]

Пользуйтесь на здоровьице. И будьте ВНИМАТЕЛЬНЕЕ К МЕЛОЧАМ.

Viktor Taran, 2016-03-04

RewriteCond %{REQUEST_URI} ^/([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$ - точно работает ?

maybe so
And in general, you have a bit too much beginning of the lines
. Let's better make a list of real links more beautifully.

litvinenkow, 2016-04-19

maybe nginx gives statics and does not even allow Apache to work in this case, I myself encountered a similar one, now I’m thinking how to be

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question