Android应用加载服务器图片失败,求修改.htaccess规则方案
嘿,我来帮你搞定这个图片加载的问题!你的核心问题是当前的.htaccess规则把所有请求都强制转发到sample.php了——包括你对upload_folder里图片的请求,这就难怪Picasso会报“访问被拒绝”或者“文件未找到”了,因为服务器其实把图片请求转去了PHP页面,根本没去读真实的图片文件。
下面给你两种修改方案,选一个适合你的就行:
方案1:直接排除整个upload_folder目录
如果upload_folder里只有图片和不需要重定向的静态资源,最简单的办法就是让.htaccess不对这个目录下的请求执行重写规则。修改你的.htaccess文件如下:
RewriteEngine on # 先判断请求是否来自upload_folder,如果是就跳过重写 RewriteCond %{REQUEST_URI} !^/root/upload_folder/ # 其他请求才重定向到sample.php RewriteRule ^.+$ sample.php [L]
这条规则的逻辑是:只有当请求的路径不是以/root/upload_folder/开头时,才会执行后面的重定向到sample.php的操作。这样你的图片请求(比如http://example.com/root/upload_folder/img1.jpg)就会直接访问真实的文件,不会被转去PHP页面了。
方案2:排除特定后缀的图片文件
如果你不想整个目录都排除,只想让图片(比如jpg、png、gif这些)不被重定向,可以用下面的规则:
RewriteEngine on # 排除常见图片格式的请求,[NC]表示不区分大小写 RewriteCond %{REQUEST_URI} !\.(jpg|jpeg|png|gif|webp)$ [NC] # 其他请求重定向到sample.php RewriteRule ^.+$ sample.php [L]
这里的[NC]参数是让规则不区分大小写,所以不管是.jpg还是.JPG都能被正确匹配。这样所有图片格式的请求都会直接访问文件,其他请求依然走sample.php的逻辑。
验证步骤
修改完.htaccess之后,先直接在浏览器里输入图片的URL(比如http://example.com/root/upload_folder/img1.jpg),看看能不能正常显示图片。如果可以的话,再用Picasso重新加载,应该就能正常获取到图片了。
额外注意
要确保你的Apache服务器允许使用.htaccess文件,也就是在服务器的站点配置里,对应root目录的AllowOverride设置为All或者FileInfo,否则.htaccess里的规则不会生效哦。
内容的提问来源于stack exchange,提问作者Swati

