mod_rewrite:“%{REQUEST_FILENAME}! - f”总是如此

时间:2013-07-11 11:34:00

标签: 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_foobar.png”,而不应该。“/ p>

我想我错过了一些旗帜?

这是我的代码:

<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>

谢谢!

解决:

因为我将规则添加到我的virtualhost配置而不是“.htaccess”我错过了“%{DOCUMENT_ROOT}”

这是固定的规则集:

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]

编辑:添加目录info1 编辑:解决了我自己的愚蠢(有没有办法删除令人尴尬的问题?)

1 个答案:

答案 0 :(得分:0)

试试这个修改过的版本。

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]