重写url加载图片后出错500

时间:2013-08-21 19:30:46

标签: regex apache .htaccess mod-rewrite

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

加载图片时,网址会重新转移到其中的另一个文件夹(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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]