我有一个用于加载图片的子域名 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
?
答案 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]