【问题标题】:Nginx "ERR TOO MANY REDIRECTS" Index.php issue?Nginx“ERR TOO MANY REDIRECTS”Index.php 问题?
【发布时间】:2016-10-20 22:37:52
【问题描述】:

我一直在努力完成这项工作,我在 Digital Ocean 上有一个 droplet,安装了 CENTOS 7 和最新的 Cpanel 版本,我在我的 Centos 上安装了一个名为 nDeploy 的软件,它安装了 nginx 并添加了 cpanel 支持以作为使用 apache 的反向代理,我仍然试图理解所有这些 nginx 的东西,所以,这个 nDeploy 插件,带有一些自动配置文件,非常适用于 wordpress 和其他东西......到目前为止,它一直非常稳定和好...... .

所以,我在这台服务器上有 2 个域(共享相同的 IP 地址,但在 whm 的不同帐户中,两个站点都运行得非常好,安装了 wordpress,但我希望 wordpress 在 1 个站点中,然后在另一个站点中我想要一个 php 脚本,它可以作为外联网系统用于预订...

所以让我们定义: 站点 1:Wordpress 站点 *工作得很好 站点 2:PHP 站点 *不工作错误:重定向过多

问题:

对于我一直试图理解的一切,我认为问题在于“站点 2”具有不同的 index.php 结构,但我不知道如何修复它...让我向您展示该索引的代码。 php:

<?php ob_start();
include "inc/config.php";
    $page = $_GET["page"];  
    if(!isset($page) || $page == "" ){ 
        header("Location:".SITE."index.php");
        exit();
    }
    $access = 1;

include "inc/template.php";
ob_flush();
?>

那么这是/inc/文件夹中template.php的代码:

<?php
if ($access != 1) {
    exit("Direct Access not allowed");
}
require_once("db.php");
if (isset($_GET["page"])) {
    $page = $_GET["page"];
}

//Content
if (file_exists(PAGES . $page . ".php")) {
    $content = PAGES . $page . ".php";
} else {
    $content = HEAD . "default.php";
}

//Sidebar
if (file_exists(SIDEBAR . $page . ".php")) {
    $sidebar = SIDEBAR . $page . ".php";
} else {
    $sidebar = SIDEBAR . "default.php";
}

//Widget
function widget($name)
{
    if (file_exists(WIDGETS . $name . ".php")) {
        include WIDGETS . $name . ".php";
    } else {
        echo "WIGET NOT FOUND";
    }
}

//Plugins 
function plugins($name)
{
    if (file_exists(PLUGINS . $name . DS . "index.php")) {
        include PLUGINS . $name . DS . "index.php";
    } else {
        echo "PLUGIN NOT FOUND";
    }
}

//Querys    
if (file_exists(QUERYS . $page . ".php")) {
    $querys = QUERYS . $page . ".php";
} else {
    $querys = QUERYS . "default.php";
}

//Currency    
if (file_exists(WIDGETS . "currencychange.php")) {
    $currency = WIDGETS . "currencychange.php";
}

//Header    
if (file_exists(HEAD . $page . ".php")) {
    $head = HEAD . $page . ".php";
} else {
    $head = HEAD . "default.php";
}

//Footer
if (file_exists(FOOTER . $page . ".php")) {
    $footer = FOOTER . $page . ".php";
} else {
    $footer = FOOTER . "default.php";
}


//Layout Pages

//Pages Data
$pageslist = mysqli_query($conn, "SELECT page_link FROM page_settings ");
$pagestotal = mysqli_num_rows($pageslist);

if (isset($_GET["page"])) {
    $page = $_GET["page"];

$type = "notfound";

for($i = 0; $i < $pagestotal; $i++) {
  $row = mysqli_fetch_array($pageslist);

$casename = str_replace('.php', '', $row[0]);  
   switch ($page) {
        case $casename:
            $type = $row[0];
            break;
    }
}

if($type == 'notfound') {
  header("Location: ".SITE."");
} else {
    $theme = ABSPATH . "template" . DS . THEME_NAME . DS . $type;
}
    include $theme;
} else {
    echo "PAGE NOT FOUND";
    exit();
}
?>

这是config.php的代码:

<?php
//------------------------------- FRONT END CONFIGURATION -------------------------------//
//------------------------------- ----------------------- -------------------------------//


//Front End URL PATH
function siteURL()
{
  $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  $domainName = $_SERVER['HTTP_HOST'].'/'; // /foldername is subdirectory
  return $protocol.$domainName;
}


//Page Path Information
define("DS", "/");
define('ROOTPATH', $_SERVER['DOCUMENT_ROOT']);
define("THEME_NAME", "default");
define('ABSPATH', dirname(__FILE__) . DS);
define('SITE', siteURL() );
define('WIDGETS', ABSPATH . "widget" . DS);
define('PLUGINS', ABSPATH . "plugins" . DS);
define('SIDEBAR', ABSPATH . "template" . DS . THEME_NAME . DS . "pages" . DS . "sidebar" . DS);
define('THEME', ABSPATH . "template" . DS . THEME_NAME . DS);
define('PAGES', ABSPATH . "template" . DS . THEME_NAME . DS . "pages" . DS);
define('QUERYS', ABSPATH . "querys" . DS);
define('HEAD', ABSPATH . "template" . DS . THEME_NAME . DS . "head" . DS);
define('FOOTER', ABSPATH . "template" . DS . THEME_NAME . DS . "footer" . DS);
define('PATH', SITE . "inc" . DS . "template" . DS . THEME_NAME . DS);
define('VERSION', "v1.7");


//Activate SSL
define('SSLACTIVE', 1); //Tell the class to use SSL Set: 1 / 0


//SMTP Configuration
define('USESMTP', 0); //Tell the class to use SMTP or phpmail Set: 1 / 0
define('AUTHSMTP', true); //Enable SMTP authentication: true / false
define('SSLSMTP', "TLS"); //Need SSL or TLS
define('PORTSMTP', 587); //Set the SMTP server port 465 or 587
define('HOSTSMTP', "smtp.sendgrid.net"); //Set the SMTP server port 465 or 587
define('USERNAMESMTP', "test"); //SMTP server username
define('PASSWORDSMTP', "test"); //SMTP server password


//Define your Key and Salt to Encrypt and Decrypt reservation email card
define('ENCRYPTORKEY', 'YOUR-KEY'); //Add your own key
define('ENCRYPTORSALT', 'YOUR-SALT'); //Add your own salt key

//------------------------------- --------------------------- -------------------------------//
//------------------------------- --------------------------- -------------------------------//



//------------------------------- BACKEND ADMIN CONFIGURATION -------------------------------//
//------------------------------- --------------------------- -------------------------------//


//Admin Panel URL PATH
function siteURLA()
{
  $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  $domainName = $_SERVER['HTTP_HOST'].'/'.'admin/'; // admin is subdirectory
  return $protocol.$domainName;
}
define( 'SITE_URL', siteURLA() );
define('WEBSITE_DOMAIN', SITE_URL);


/// Default language: en, es, autodetect
$DEFAULT_LANGUAGE = "autodetect";
$cookiepath = "/";
$multilangpath = SITE_URL . "multilang";
$multilangurl = "/admin/multilang";
$websitedirectory = "/";


//BACKEND ADMIN TITLE
define('WEBSITE_NAME', "Bookingo");


//SESSION CONFIGURATION
define('SESSION_NAME',"ac_session");
define('SESSION_SECURE', false);
define('SESSION_HTTP_ONLY', true);
define('SESSION_REGENERATE_ID', true);
define('SESSION_USE_ONLY_COOKIES', 1);


//LOGIN CONFIGURATION
define('LOGIN_MAX_LOGIN_ATTEMPTS', 7);
define('LOGIN_FINGERPRINT', true);


//PASSWORD CONFIGURATION
define('PASSWORD_ENCRYPTION', "bcrypt"); //available values: "sha512", "crypt"
define('PASSWORD_BCRYPT_COST', "13");
define('PASSWORD_SHA512_ITERATIONS', 25000);
define('PASSWORD_SALT', "********"); //22 characters to be appended on first 7 characters that will be generated using PASSWORD_ info above


//REGISTRATION CONFIGURATION
define('REGISTER_CONFIRM', SITE_URL . "confirm.php"); 
define('REGISTER_PASSWORD_RESET', SITE_URL . "passwordreset.php"); 


//ERROR MESSAGES
define('ERROR_EMAIL_REQUIRED', "Email is required.");
define('ERROR_EMAIL_WRONG_FORMAT', "Please enter valid email.");
define('ERROR_EMAIL_NOT_EXIST', "This email doesn't exist in our database.");
define('ERROR_EMAIL_TAKEN',"User with this email is already registred.");
define('ERROR_USERNAME_REQUIRED', "Username is required.");
define('ERROR_USERNAME_TAKEN', "Username already in use.");
define('ERROR_USER_NOT_CONFIRMED', "Please confirm your email.");
define('ERROR_PASSWORD_REQUIRED', "Password is required.");
define('ERROR_WRONG_USERNAME_PASSWORD', "Wrong username/password combination.");
define('ERROR_PASSWORDS_DONT_MATCH', "Passwords don't match.");
define('ERROR_WRONG_SUM', "Wrong sum. Please check it again.");
define('ERROR_BRUTE_FORCE', "You exceeded maximum attempts limit for today. Try again tomorrow.");


//SUCCESS MESSAGES
define('SUCCESS_REGISTRATION', "Registration successful. Please check your email.");
define('SUCCESS_ADDUSER', "Registration successful.");


//CUSTOM APP DATA
define('APPNAME','extranet');
define('COMPANYNAME','extranet');
define('COPYRIGHT','2013 - 2015 &copy; Powered by extranet - '. VERSION);
define('LICENCE_KEY','*******');
?>

所以.. 如您所见,根目录上的 index.php 会将您带到其他几个 php 文件,以显示真正的 index.php(或者至少这是我理解的),我认为这是问题,因为例如,如果我访问后端管理站点,那里的一切都运行良好......至于 site2.com/admin/

但是 site2.com/ 根主目录不起作用,给我这个错误:“重定向太多”

提前感谢您对此提供的任何帮助...请原谅我的英语不是我的母语。

如果您需要任何其他代码...或日志或任何我可以提供的...

【问题讨论】:

    标签: php apache nginx cpanel centos7


    【解决方案1】:
    $page = $_GET["page"];    
    if(!isset($page) || $page == "" ){ 
        header("Location:".SITE."index.php");
        exit();
    }
    

    让我描述一下

    1. 如果没有 URL 参数 pageGET 请求,则重定向到 SITE . "index.php"
    2. 常量SITE等于函数siteURL()
    3. 函数siteURL() 是打印https://example.comhttp://example.com

    这 3 个点指向 http://example.com/index.phphttps://example.com/index.php,其中之一是您现在尝试访问的 URL。

    如果您再次回顾第 1 点。您会知道为什么。

    您正在访问的页面正在将您重定向到您正在访问的页面 访问就是将您重定向到您访问的页面.....所以 无限前进

    所以 URL 参数 page 需要设置,假设默认 pageindex

    if(!isset($page) || $page == "" ){ 
        header("Location:".SITE."index.php?page=index");
        exit();
    }
    

    【讨论】:

    • 嗨,@Chay22 谢谢……我想我现在明白了……我按照你说的尝试了,我现在得到一个 HTTP ERROR 500……不确定是否还需要打开我的代码或 nginx 配置。
    • 此时,您最好发布错误日志并更新您当前的尝试。我假设它发生是因为你的 mysqli 循环
    • 嗨...我从 cpanel 更改为 PHP5.6,它被设置为 PHP7.0,所以我改变了,现在家正在工作...没有错误...现在我有另一个问题。 ..当我转到页面的其他位置时...例如:site2.com/reservation.php,它说找不到文件...这个reservation.php不在index.php所在的根目录中。 . 但是这段代码在普通的 LAMP Cpanel 配置中开箱即用,这只发生在我的新 nginx 配置中……我应该分享什么错误日志?再次感谢@Chay22
    • 当您说 500 http 错误时,表示 http 服务器或 PHP 脚本本身会导致问题。因此,在这种情况下,来自 PHP、apache 和 nginx 的错误日志文件可能会有所帮助。对于另一个问题,因为它是 (reservation.php) 文件位于根目录之外,因此错误依赖于 nginx 配置,您需要对您在那里编写的内容有所了解。我最好的选择是在serverfault.com 上发布新问题
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多