【问题标题】:404 Page not found using form submission使用表单提交找不到 404 页面
【发布时间】:2013-07-28 06:07:18
【问题描述】:

在 localhost 中一切正常。

但我有一个主机,在 /public_html/site 文件夹中我有主 WordPress 网站。我有另一个 PHP 站点,它在 /public_html/site/BETA 中没有 htaccess。

您可以在这里登录:http://yoursocialtool.com/BETA/login.php 用户:栈 密码:溢出 现在的问题是,当我在登录后尝试注销时,使用表单提交到与http://yoursocialtool.com/BETA/dashboard.php 相同的页面,它说:

404 页面未找到!

但是如果我直接将url放在浏览器地址栏http://yoursocialtool.com/BETA/dashboard.php那么它的加载很好,没有任何404错误。

/public_html 中的 .htaccess:

RewriteOptions inherit

RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursocialtool.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursocialtool.com$
RewriteCond %{REQUEST_URI} !site/
RewriteRule (.*) /site/$1 [L]

/public_html/site 中的 .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>

# END WordPress

这是我在 dashboard.php 中使用的代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set('error_log','error.log');
require("config.inc.php");
require("__require_login.php");
require_once("_isconnected.php");
if (isAppLoggedIn()){
    require("_dashboard.html.php");
} else {
    echo ($msg);
    ?>
    <script>
window.location = "./login.php?from=dashboard&location=";
window.location.assign("./login.php?from=dashboard&location=assign");
    </script>
    <?php
}
?>

我面临的问题是登录后代码没有在服务器中执行 JavaScript 重定向。实际上,在我提交注销请求后它没有得到dashboard.php,尽管它似乎已成功注销。我也在dashboard.php 中处理注销操作。似乎是 /public_html/site/index.php 仅在注销提交后才处理它。

注意:我的本地主机只有 /public_html/site/BETA 下的部分站点。所以本地主机没有任何htaccess或wordpress。

【问题讨论】:

  • 显然http://myrootsite.com/BETA/dashboard.php所代表的文件不存在,因此404。你的问题是什么?请记住,您不能沿树向上继承,只能向下继承。因此,正如您在这里提出的问题,您显然缺少了解inherit rewrite option 以及本网站的范围,请参阅stackoverflow.com/help 以了解可以在这里提出哪些问题以及如何制定一个好的、具体的、以编程为中心的问题(通常被接受)。
  • 这个问题似乎是题外话,因为它是关于配置第三方软件的支持请求,这里是 Apache HTTPD。
  • @BLaZuRE:请把措辞上的细微但明显的区别与你引用的类似的密切原因 “有关通用计算硬件和软件的问题与 Stack Overflow 无关,除非它们直接涉及主要用于编程的工具。您也许可以在超级用户方面获得帮助。”(由我强调)。此处引用的工具 - .htaccess - 主要用于网络服务器配置,而不是编程。在这里非常挑剔可能是值得的,因为 OP 错过了准确概述他的示例应该工作的原因。
  • @hakre 我同意你的观点,但请注意 Apache 配置问题是officially on-topic on SO
  • @hakre 我不想在这里闲逛或聊天,所以我停止评论,因为它与回答这个问题无关。根据您的评论,Android 手机主要用于电话和移动计算机,但它也与移动开发人员的编程有关。您还需要通过某些方式配置 Android 设备才能使移动应用程序正常工作。

标签: apache .htaccess mod-rewrite http-status-code-404


【解决方案1】:

我将网站移至子域。之后,我看到 404 出现 500 错误。 我已经找到了咨询 Apache 系统管理员的解决方案。他们向我展示了日志中的错误,如下所示:

malformed header from script. Bad header=

然后我发现服务器不支持服务器端php脚本中的重定向。然后我禁用服务器中的重定向,现在它工作正常。我使用了 JavaScript 重定向。

<?php
//header('Location: http://www.example.com/');//Use JavaScript to redirect instead. Comment it out
exit;
?>

如果有人必须需要重定向,那么可以尝试在标头声明之后使用构造 exit;。否则使用 JavaScript。

【讨论】:

    【解决方案2】:

    在 localhost 中一切正常。

    仅仅因为它可以在本地主机上工作,它不一定需要在任何地方工作。这就是为什么您的服务器配置的开发版本与您稍后将其部署到的服务器配置接近(如果不相同)本质上很重要的原因。

    为此,请使用 virtualization 并尝试在您的本地主机上重现 404。

    在两端获得相同的行为是对问题进行故障排除时要做的第一个明智的检查。根据您在问题中提供的当前信息,这是我能给出的最佳建议。

    简短的回答是:两个系统之间的配置不同。请注意,您可以在两个系统上使用相同的配置,其中不仅包括配置指令,还包括所有涉及的软件的相同版本,例如相同版本的网络服务器、相同的操作系统和相同版本的 PHP(尽管PHP 似乎不是这里的问题)。

    【讨论】:

    • 您可以尝试登录和注销吗?然后你就可以看到问题了。我已经说过登录信息。
    • @Sazzad Hossain Khan:请让我访问您无法重现问题的本地计算机。我完全相信您能够按照您的概述在公共系统上触发错误。我不需要在那里重试,因为它与您的本地主机不同,因此在本地主机上复制是解决此问题的关键。请注意:我只接受访问公共计算机。如果此 localhost 是私有配置,则需要根据合同进行操作以保护您的隐私,这使我可以将其保持在专业水平。
    • 我在编辑中添加了一些代码。请检查一下。你能通过 TeamViewer 连接到我的私人电脑吗?如果是,那么我应该把访问权限发给你哪里?
    • @SazzadHossainKhan:您是否可以提前支付四个小时的支持费用且不可退款(约 268 欧元)。如果没有,请不要亲自问我。如果是,如果您提供电子邮件地址以便进一步联系,我很乐意为您提供帮助。
    • 对不起@hakre:它超过了整个项目预算。所以我无能为力。不过谢谢你。
    猜你喜欢
    • 2019-01-17
    • 2016-01-23
    • 2017-10-30
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多