Regex 重写url以加载图像后出现错误500

Regex 重写url以加载图像后出现错误500,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我有一个子域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_file

我有一个子域
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]
很好,但现在我有个问题。 如果映像不存在,它会创建一个
内部服务器错误-500
,但我希望能够加载一个“错误”映像,如
errorImg.png
,但目前为止我无法加载


如果图像不存在,我如何将url重写到该
errorImg.png

这是因为您正在捕获整个URI并将其路由到
pics\u文件
目录中。如果图像不存在,
-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]

将代码替换为以下内容:

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]

谢谢你的回答,非常有用。但是你没有提到加载“错误”图像:)谢谢,它工作正常。但我只需要改变一件事。我不需要从pics_文件夹加载errorImg.png,而是需要它位于根文件夹(之前的文件夹)。我尝试了“RewriteRule^(.*)$/errorImg.png[L]”,但没有成功!!非常感谢,太好了!效果很好。非常感谢。很抱歉,我少了一件事!无论图像是否存在,它都可以正常工作,但若并没有像这样的图像名称呢?我测试过了,它不起作用。它还应加载错误图像!:(我不理解你的上一条评论。如果url只是“”,结尾没有文件名,它将加载根文件夹的索引文件,而不是错误图像。需要在.htaccess文件中更改什么?谢谢。