我需要一些高级文件包含代码的帮助..我用Google搜索,但我不确定如何用简短的方式来描述它。
基本上这里是文件结构:
/public_html/include_handle.php
/protected_site/index.html
/images/image.jpg
如果我使用常规include语句包含index.html,则image.jpg显然不会在浏览器中显示,因为它不在公共/相对目录中。除了一些沉重的preg_match / replace解析之外,如何在包含index.html时在include_handle.php页面上显示图像?我还希望能够链接到index.html页面中的其他页面。我知道我可以使用iframe并将静态页面放在公共目录中,但我不希望出于各种原因。任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
您可以设置Apache别名以在公共站点中创建“虚拟”目录:
Alias /images /protected_site/images
之后,面向公众的网页中的任何/images/
网址都将在内部重定向到受保护网站的图片目录。成本是这暴露了受保护站点的文档树的一部分,因此您必须小心放入该图像目录中的内容。
答案 1 :(得分:1)
第一个解决方案:将图像放到公共文件夹中,浏览器可以访问它,.html中的链接应该是相对于/ public_html
第二个解决方案:通过php脚本提供受保护的图像(您需要为浏览器发出正确的标题并使用readfile例如传递图像数据) jpg的例子:
header("Content-Type: image/jpeg");
readfile("/protected_site/images/image.jpg");
图像链接如下:
image.php?id=image.jpg
答案 2 :(得分:1)
您可以使用页面的base HTML标记,就好像它位于不同的目录(或主机)中一样。将使用此值作为当前文档解析相对链接。
我猜我无法通过网络访问protected_site
。您将需要一个PHP脚本来读取受保护目录中的文件并将其发送给用户。它看起来像:
getimage.php?image=image.jpg
如果您不想更改index.html的内容并仍然以something.jpg
而不是上面的方式链接到图像,则可以在服务器端使用mod_rewrite:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?\.(jpg|gif|png))$ getimage.php?image=$1 [L]
这样,apache会为你的PHP调用公共目录中不存在的任何图像文件。