php 变量 $page 未正确传递到 URL

php variable $page not passed correctly into the URL

我正在尝试从 Kollaborate 安装审查和批准服务器,它基本上是一个包含 js/php 文件的 zip 包,需要将其部署在文档根目录中,然后导航到 http://server-ip/install/index.php

但是导航到下一页会导致直接将 $page 变量传递给 URL 而不是像 1.php -> 2.php 等等。我明白了这个: http//server-ip/install/index.php?page=<?=($page+1) 导致 'Page not found!' 网页上的一些 pagecounter 也没有正确显示所以它看起来像 index.php 中的变量 $page 没有正确地传递给浏览器它的真实值。 suEXEC 作为 fast-cgi 包装器被禁用,.htaccess

中有一些重写规则
RewriteEngine On
# Is not directory
RewriteCond %{REQUEST_FILENAME} !-d
# Is an existing php file
RewriteCond %{REQUEST_FILENAME}\.php -f
# rewrite index to index.php
RewriteRule ^(.*)$ .php

使用 javascript 完成的导航功能的一小段: 由于这是一款可以购买且通常不需要的软件 由客户编辑我只是展示他们如何构建它。协作 除了说我的安装有问题外,支持人员无法进一步帮助我。

<?php
$page_count = 15;
$page = 1;
if (isset($_GET['page'])) $page = $_GET['page'];

if (!file_exists("pages/$page.php")) {
    echo '<h1>Error: Page not found!</h1>
    <a href="index.php?page='.($page+1).'"><button>Next Page</button</a>';
    exit;
}

并且导航步骤在 index.php

中更进一步
<script>
function nextPage()
{
if (typeof endPage == 'function') {
    var err = endPage();
            if (err && err.length > 0) {
        $('#error').html(err);
        $('#error').show();
        return;
    }
}

$('#error').hide();
    window.location.href = "index.php?page=<?=($page+1)?>";
}
</script>

此 Kollaborate 服务器需要 Ubuntu 上的某种 LAMPP 堆栈,但我使用的是 CENTOS 并安装了单独的必需软件包,如 php/mysql/nodejs/

此服务器的配置分为 15 个步骤,每个步骤都在单独的 php 文件(1.php 到 15.php)中定义,这些文件位于安装文件夹中的 pages 文件夹中。

一年前我曾在 Centos 上使用过一次,但现在不知道在哪里寻找...它是 httpd 中格式错误的配置问题还是 php?或者 nodejs 也许?全部安装在 Centos 6.7 上,所有内容都是最新的,并且基于 httpd 和 php 5.5.3(之前尝试过 nginx,但产生了同样令人失望的结果)

乍一看,您的 php 配置中可能没有启用短标签。使用短标签 <? 而不是长标签 <?php 需要设置 short_open_tag php ini 指令。如果您在应用程序中创建一个 php 脚本并将其设置为 运行 phpinfo(); 应该有一行告诉您短标签是关闭还是打开。只需搜索 'short_open_tag'.

您也可以尝试在 index.php 中切换到长标记语法,而不是

window.location.href = "index.php?page=<?=($page+1)?>";

该行将是

window.location.href = "index.php?page=<?php echo ($page+1);?>";

另一种方法是安装 PHP 5.4,它会自动启用短回显标签,而不管 PHP.ini 中的 short_open_tag 值如何。

这可能是该问题的更好解决方案,因为它允许您使用短回显标签,而无需启用可能 XML 破坏的短标签。