Drupal 7中iframe加载主题内HTML文件出现404错误求助
我来帮你梳理下可能导致这个404错误的几个常见原因,结合Drupal 7的特性逐一分析:
主题目录的访问限制:Drupal默认通过.htaccess规则限制了主题目录的直接访问,目的是为了安全。你把
user_news放在my_theme主题文件夹下,直接通过URL访问时会被Drupal的路由系统或者服务器的.htaccess拦截,导致404。建议把user_news文件夹移到sites/default/files目录下(这个目录是Drupal默认允许直接访问的),或者修改主题目录的.htaccess规则(不推荐,存在安全风险)。URL路径拼接错误:先确认
variable_get("portal_link", NULL)返回的路径是否正确,比如有没有遗漏末尾的斜杠?另外,Drupal的主题通常存放在sites/all/themes/或者sites/[你的站点名称]/themes/目录下,所以正确的URL应该是<?=variable_get("portal_link", NULL);?>/sites/all/themes/my_theme/user_news/index.html,你可能漏了sites/all/themes这部分路径,导致服务器去网站根目录找my_theme,自然找不到。文件或文件夹权限不正确:即使路径正确,如果
user_news文件夹或者index.html文件的权限设置不对,web服务器(比如www-data用户)无法读取这些文件,也会返回404。建议把文件夹权限设置为755,文件权限设置为644,确保服务器能正常访问。.htaccess规则被修改:默认的Drupal .htaccess文件里有允许静态文件(比如html、css)直接访问的规则,如果你的.htaccess被修改过,可能移除了这些规则。检查一下站点根目录的.htaccess文件,看看是否包含类似下面的规则:
# 允许访问静态文件 RewriteRule ^(.*\.(html|htm|css|js|jpg|jpeg|gif|png|svg|ico|pdf|swf|flv|txt|xml|xsl))$ - [L]如果没有,添加这条规则后应该能让静态文件直接被访问。
Drupal缓存干扰:有时候Drupal的缓存会导致URL解析出现异常,你可以尝试清空所有缓存(后台进入「配置」->「性能」->「清空所有缓存」),然后再测试iframe是否能正常加载。
内容的提问来源于stack exchange,提问作者Node_Ninja

