2

如果用户访问 URL,例如: http: //www.domain.com/image/orange.jpgorange.jpg不存在,但 orange.png 存在,.htaccess 可以让用户找到它吗?

4

1 回答 1

1

这应该是可能的。mod_rewrite 允许检查文件是否存在。并且它允许多次重写,以防您不使用[L]标志主动停止该过程。.

因此,尝试以这样的方式作为起点(未经测试):

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/image/([^/.]).jpg$
RewriteCond %{REQUEST_URI} !-f
RewriteRule ^/image/([^/.]).jpg /image/$1.png

RewriteCond %{REQUEST_URI} ^/image/([^/.]).png$
RewriteCond %{REQUEST_URI} !-f
RewriteRule - /image/no-found [G,L]

如果在中央服务器配置(每主机配置)中定义,则上述内容适用。对于 .htaccess 样式文件,语法略有不同:在这种情况下,不得出现.htaccess 中的前导斜杠 ( /) 。RewriteRule如果您可以选择在服务器配置中进行重写。.htaccess 样式文件类似于一种解决方法,而且很容易出错。如果可能,尽量避免它们。

但是请注意,这样的设置有些限制并且维护起来很烦人。通常,设置一个小型包装脚本(可能基于 php)来处理请求并在决定发送什么响应之前检查许多替代方案是一个更好的选择。您可以将请求重写为以下内容:

RewriteEngine on
RewriteRule ^/image/([^/.])\..+$ /image.php?name=%1

现在,您可以使用脚本为该请求提供服务,您可以在该脚本image.php中轻松检查现有版本的图像,并根据自己的喜好返回标题和内容。

于 2013-02-10T08:11:02.403 回答