1

我有一个pics.mysite.com用于加载图像的子域,因此图像的 src 类似于http://pics.mysite.com/image.png

加载图像时,url 被重写到 ( pics_files) 内的另一个文件夹,其中的文件如下:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ pics_files/$1 [L,QSA]

工作正常,但现在我遇到了问题。如果图像不存在,它会创建一个Internal Server Error - 500,但我希望能够加载一个“错误”图像,例如errorImg.png,但到目前为止我还不能。

errorImg.png如果图像不存在,我如何将网址重写为该网址?

4

2 回答 2

1

这是因为您正在捕获整个 URI 并将其路由到pics_files目录中。如果图像不存在,则!-f条件通过并再次重写 URI,因此您最终得到:

/pics_files/pics_files/image.png

不存在,所以再次重写 URI:

/pics_files/pics_files/pics_files/image.png

哪个不存在,所以 URI 被再次重写,等等等等。

与其检查 URI 是否不是文件或目录作为条件,不如检查目标图像是否确实存在:

RewriteEngine On

RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/pics_files%{REQUEST_URI} -f
RewriteRule ^ /pics_files%{REQUEST_URI} [L]
于 2013-08-21T19:38:40.180 回答
1

用这个替换你的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^pics\.mysite\.com$ [NC]
RewriteRule ^$ /errorImg.png [L]

# if valid image file then load it from /pics_files/ directory
RewriteCond %{DOCUMENT_ROOT}/pics_files/$1 -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pics_files/$1 [L]

# if not-existing image file then load /pics_files/errorImg.png
RewriteCond %{DOCUMENT_ROOT}/pics_files/$1 !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /errorImg.png [L]
于 2013-08-21T19:46:00.233 回答