Apache 修改:重写%{请求文件名}-f";永远正确

Apache 修改:重写%{请求文件名}-f";永远正确,apache,mod-rewrite,Apache,Mod Rewrite,如果没有创建新的图像大小,我会尝试为一些遗留图像提供服务 我的问题是,即使出现了新版本,遗留版本也会得到服务 例如: foobar.png=>存在 n1_foobar.png=>不存在 b_foobar.png=>存在 b2_foobar.png=>存在 所有文件都在“/sub/dir/123/”中。“123”可以根据所服务的页面进行更改 这意味着“foobar.png”被提供,然后我请求“n1_foobar.png”。 但当我请求“b2_foobar.png”时,它也提供“b1_fooba

如果没有创建新的图像大小,我会尝试为一些遗留图像提供服务

我的问题是,即使出现了新版本,遗留版本也会得到服务

例如:

  • foobar.png=>存在
  • n1_foobar.png=>不存在
  • b_foobar.png=>存在
  • b2_foobar.png=>存在
所有文件都在“/sub/dir/123/”中。“123”可以根据所服务的页面进行更改

这意味着“foobar.png”被提供,然后我请求“n1_foobar.png”。 但当我请求“b2_foobar.png”时,它也提供“b1_foobar.png”,而它不应该这样做

我想我少了一些旗子吧

这是我的代码:

<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>
编辑:添加了目录信息1
编辑:解决了我自己的愚蠢问题(有没有办法删除令人尴尬的问题?

试试这个修改版

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]

此外,如果我将文件移动到根目录,您的解决方案将无法工作。“n1_foobar.jpg”在丢失时不由“foobar.jpg”提供。您的图像的完整URL到底是什么?”/a/1452542/b2_foobar.jpg“、“/a/1452542/b_foobar.jpg”和“/a/1452542/foobar.jpg”。“不在场”是“/a/1452542/n1_foobar.jpg”,这正是我试图重写的内容。
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]