【发布时间】:2014-01-19 16:32:09
【问题描述】:
编辑 4:
如果您使用的是免费版本的 heroku(带有一个网络测功机),这只是一个问题,我在下面做了一个解决方法。但这仍然是一个有效的问题,所以我不确定投反对票的原因是什么......
这适用于本地和其他网络酒店。
.htaccess 以下适用于索引,但是当像类别/戏剧一样访问“子目录”/mod_rewrite 目录时,我得到的只是“应用程序错误”
编辑
所以我所做的是,我不是通过 .htaccess 进行所有重写,而是像这样发送每个请求:http://example.com/CatX/CatY/CatZ/ 到 http://example.com/redirs.php?data=CatXCatYCatZ。然后在redirs中我获取页面并输出它,但这只会在heroku上给出应用程序错误,并且检查日志更加令人困惑,因为它报告未能首先获取请求然后继续获取它。
问题网址示例:http://movie-nights.herokuapp.com/category/Crime/
我只有免费插件和基础包。我也尝试过 curl 但没有输出数据应该是通过 curl 获取的 - 空结果但 redirs.php 有效。
“应用程序错误”
“应用程序发生错误,无法提供您的页面。请稍后再试。
如果您是应用程序所有者,请查看您的日志以了解详细信息。”
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/css/(.+)$ css/$2 [L]
RewriteRule ^(.*)/bilder/(.+)$ %{SCRIPT_URI}bilder/$2 [L]
RewriteRule ^(.*)/grafik/(.+)$ grafik/$2 [L]
RewriteRule ^(.*)/js/(.+)$ %{SCRIPT_URI}js/$2 [R]
RewriteRule ^(.*)/lightbox/(.+)$ %{SCRIPT_URI}lightbox/$2 [L]
RewriteRule ^(.*)/bootstrap/(.+)$ bootstrap/$2 [R]
RewriteRule ^FAQ(/)*$ %{SCRIPT_URL}faq.php [L]
RewriteRule ^MovieDescription/$ %{SCRIPT_URL}xxx/xxx.php [L]
RewriteRule ^stream/url\=(.+)$ $1 [R]
RewriteRule ^id/([0-9]*)$ id/$0/ [L]
RewriteRule ^id/([0-9]*)/(.*)$ id/$0/ [L]
RewriteCond %{REQUEST_FILENAME} !-f #<-- here
RewriteRule ^(.*)/$ redirs.php?data=$0 [QSA] #<-- here
redirs.php
<?php
function makeUrl($attr, $url) {
if (preg_match('#\?#', $url)) {
$attr = '&'. $attr;
} else {
$attr = '?'. $attr;
}
return $attr;
}
function getWebCwd() {
$dir = '';
if (!empty($GLOBALS['BaseCat'])) {
$dir = $GLOBALS['BaseCat'];
}
if (!empty($GLOBALS['subUrl'])) {
// Can be for example:
//$subUrl = 'Streamed-Movies/';
$dir .= $GLOBALS['subUrl'];
}
return $dir;
}
$url = '/index.php';
$data = $_GET['data'] . getWebCwd();
if (preg_match('#category\/([a-zA-Z]+)#iu', $data, $matches)) {
$url .= makeUrl('category='. $matches[1], $url);
}
$sid = session_id();
if (!empty($sid)) {
$url .= makeUrl(session_name() .'='. $sid, $url);
}
$url = 'http://'. $_SERVER['SERVER_NAME'] . $url;
$opts = array('http' => array(
'method' => "GET",
'header' => "Accept-language: en\r\n" . "Cookie: ".session_name()."=".session_id()."\r\n" )
);
$context = stream_context_create($opts);
session_write_close(); // this is the key
$html = file_get_contents($url, false, $context); // <-- line 92
echo $html;
来自 Papertrail 插件的错误日志:(请求的 url 是正确的,如果您尝试打开它就可以工作)
Jan 02 00:40:49 movie-nights app/web.1: [Thu Jan 02 08:40:49 2014] [error] [client 10.34.132.2] PHP Warning: file_get_contents(http://movie-nights.herokuapp.com/index.php?category=Crime&PHPSESSID=c54qgv6pgj2mme2is32qljs865): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Unavailable\r\n in /app/www/redirs.php on line 92
Jan 02 00:40:49 movie-nights app/web.1: 10.34.132.2 - - [02/Jan/2014:08:40:19 +0000] "GET /category/Crime/ HTTP/1.1" 200 -
Jan 02 00:40:50 movie-nights app/web.1: 10.34.132.2 - - [02/Jan/2014:08:40:49 +0000] "GET /index.php?category=Crime&PHPSESSID=c54qgv6pgj2mme2is32qljs865 HTTP/1.1" 200 16864
所以它试图打开http://movie-nights.herokuapp.com/index.php?category=Crime&PHPSESSID=c54qgv6pgj2mme2is32qljs865 => :打开流失败:HTTP 请求失败! HTTP/1.1 503 服务不可用
=> 但是如果您尝试手动打开它,它会起作用。
编辑2
我也收到此错误(如下),但从我所读到的内容来看,这应该不是问题吗?
Jan 11 23:05:21 movie-nights app/web.1: [Sun Jan 12 07:01:38 2014] [error] server reached MaxClients setting, consider raising the MaxClients setting
编辑3
在下面我自己的答案中查看解决方案!
【问题讨论】:
标签: php .htaccess curl heroku file-get-contents