PHP网站中与根目录同级的uploads目录图片HTML访问问题
首先得说,你当前用的../../uploads/<?=$filename?>大概率会失效——原因很简单:你的uploads目录和网站根目录同级,而服务器默认禁止从网站根目录向上访问上级目录内容,直接用这种相对路径会触发403(权限拒绝)或者404(找不到文件)错误。
下面给你两种靠谱的解决思路,选哪种看你的服务器配置权限:
方法1:配置服务器别名(推荐)
直接让服务器把/uploads这个URL路径映射到你同级的uploads目录,这样不管你的页面在网站的哪个子文件夹里,都能用绝对路径稳定访问图片。
Apache服务器配置
找到你的Apache配置文件(比如httpd.conf或者虚拟主机配置文件),添加以下内容:
Alias /uploads /path/to/your/uploads <Directory /path/to/your/uploads> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
把/path/to/your/uploads替换成你实际的uploads目录绝对路径(比如/var/www/uploads),然后重启Apache服务。
之后在HTML里直接用:
<img src="/uploads/<?=$filename?>">
Nginx服务器配置
打开Nginx的虚拟主机配置文件,在server块里添加:
location /uploads { root /path/to/parent-directory; # 这里填uploads目录的父目录,比如/var/www index index.html index.htm; }
替换路径后重启Nginx,同样用上面的绝对路径代码访问图片。
方法2:创建软链接(适合没服务器配置权限的情况)
在你的网站根目录下创建一个指向同级uploads目录的软链接,相当于在网站根目录里“挂载”一个uploads入口,让服务器能识别到这个目录。
Linux/macOS
打开终端,执行:
ln -s /path/to/your/uploads /path/to/website-root/uploads
比如网站根目录是/var/www/html,uploads是/var/www/uploads,那命令就是:
ln -s /var/www/uploads /var/www/html/uploads
Windows
打开管理员权限的命令提示符,执行:
mklink /D C:\path\to\website-root\uploads C:\path\to\uploads
比如XAMPP的网站根是C:\xampp\htdocs,uploads是C:\xampp\uploads,命令就是:
mklink /D C:\xampp\htdocs\uploads C:\xampp\uploads
创建完成后,同样可以用<img src="/uploads/<?=$filename?>">来访问图片。
额外注意:权限问题
不管用哪种方法,都要确保uploads目录有web服务器用户的读写权限,否则上传图片或者访问图片都会失败。Linux下可以执行:
chown -R www-data:www-data /path/to/your/uploads chmod -R 755 /path/to/your/uploads
Windows下右键uploads目录,设置服务器运行用户(比如IIS_IUSRS)的读写权限即可。
内容的提问来源于stack exchange,提问作者Ehtisham Hassan

