apache - mod_rewrite: "%{REQUEST_FILENAME} !-f" always true -


i try serve legacy images if new images sizes have not been created.

my problem is, legacy versions served, when new versions present.

example:

  • foobar.png => present
  • n1_foobar.png => not present
  • b_foobar.png => present
  • b2_foobar.png => present

all files in "/sub/dir/123/". "123" can change depending on page served.

it works in means "foobar.png" served request "n1_foobar.png". serve "b1_foobar.png " when request "b2_foobar.png" while should not.

i guess missing flags?

this code:

<ifmodule mod_rewrite.c>   # options -multiviews   rewriteengine on   rewritecond %{request_filename} !-f   rewriterule ^(.*)\/n1_(.*)$ $1/$2 [l]   rewritecond %{request_filename} !-f   rewriterule ^(.*)\/b2_(.*)$ $1/b_$2 [l] </ifmodule> 

thanks!

solved:

since adding rules virtualhost-configuration , not ".htaccess" missing "%{document_root}"

this fixed ruleset works:

rewriteengine on rewritecond %{document_root}%{request_filename} !-f rewriterule ^(.*)\/n1_(.*)$ $1/$2 [l]  rewritecond %{document_root}%{request_filename} !-f rewriterule ^(.*)\/b2_(.*)$ $1/b_$2 [l] 

edit: added directory info1 edit: solved own stupidity(is there way delete embarrassing questions?)

try modified version.

options +followsymlinks -multiviews # turn mod_rewrite on rewriteengine on rewritebase /  rewritecond %{request_filename} -f [or] rewritecond %{request_filename} -l [or] rewritecond %{request_filename} -d rewriterule ^ - [l]  rewriterule ^([^/]+)/n1_(.+)$ /$1/$2 [l,nc]  rewriterule ^([^/]+)/b2_(.+)$ /$1/b_$2 [l,nc] 

Comments