我正在尝试从drupal 7站点抓取渲染的html。但是,由于重写规则,我无法使用file_get_contents或curl或其他任何东西来锁定文件。当试图从我的服务器加载任何本地文件时,我总是得到一个"404文件未找到“错误。
我的站点被设置为作为一个Drupal站点运行--这个站点是从一个名为/drpal3/ .htaccess重写规则的文件夹中提供的:
RewriteRule ^$ drupal3/index.php [L]
RewriteCond %{DOCUMENT_ROOT}/drupal3%{REQUEST_URI} -f
RewriteRule .* drupal3/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* drupal3/index.php?q=$0 [QSA]
这些规则主要做的是检查一个文件是否存在于德鲁巴3/文件夹中,如果存在,就提供该文件。如果不存在,请检查它是否存在于德鲁巴3/文件夹之外,如果存在,则为其服务。因此,mydomain.com现在指向mydomain.com /drpal3/然而,它仍然以mydomain.com的形式读取,因为它是url。这使得我仍然可以将原始urls保存在服务器上的文件中。
不过,我的问题是,尽管站点行为正确,但php似乎无法遵循重定向规则并提供/打开最终文件。
$html = file_get_contents("http://mydomain.com");
给了我failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
我还用CURLOPT_FOLLOWLOCATION = true尝试了curl,但问题相同。
有人能深入了解我如何才能正确地从我的服务器获得页面的HTML内容吗?
干杯
发布于 2014-05-25 19:00:53
可能性1
摘自PHP文档:文件获取内容
如果启用了fopen包装器,则可以将URL用作此函数的文件名。有关如何指定文件名的更多细节,请参见fopen()。请参阅支持的协议和包装器,以获得有关各种包装器具有哪些功能的信息的链接、关于它们的使用的说明以及它们可能提供的任何预定义变量的信息。
因此,确保允许在服务器上使用allow_url_fopen
。
可能性2
确保服务器能够正确解析域名。尝试获取其他外部站点。如果仍然是404错误,服务器的主机文件有问题。
如果您的两个站点都托管在一台服务器上,则只需在http://localhost/your-drupal-site
中使用file_get_contents
即可。
https://stackoverflow.com/questions/23861822
复制相似问题