设置 htaccess 重写规则后未发送表单 Post 数据

Form Post data not being sent after setting htacces rewrite rule

我正在使用 PHP-login.net 框架进行登录,我将文件夹托管在另一个网站的子文件夹中,并使用 htaccess 将其重定向到我为该子文件夹创建的主域。

RewriteCond %{HTTP_HOST} ^(www.)?decathlon.ga$ [NC]
RewriteCond %{REQUEST_URI} !^/decathlon/.*$
RewriteRule ^(.*)$ /decathlon/ [L]

当我把它当作 saint57records.com/decathlon 时它工作正常,但是当我添加重定向时 POST 数据没有从这个表单发送。但是,所有链接都按预期重定向。

<form action="http://decathlon.ga/login/login" method="post">
<label>Username (or email)</label>
<input type="text" name="user_name" required />
<label>Password</label>
<input type="password" name="user_password" required />
<input type="checkbox" name="user_rememberme" class="remember-me-checkbox" />
<label class="remember-me-label">Keep me logged in (for 2 weeks)</label>
<input type="submit" class="login-submit-button" />
</form>

在它转到的页面上执行此检查并给我错误消息 POST 为空。

http://decathlon.ga/login/login 下面的部分

if (!isset($_POST['user_name']) OR empty($_POST['user_name'])) {
    $_SESSION["feedback_negative"][] = FEEDBACK_USERNAME_FIELD_EMPTY;
    return false;
}

所以一切都重定向到正确的位置,但是有人知道由于重定向,POST 数据可能发生了什么吗?

我不是 100% 清楚你要做什么,但你正在将所有不匹配 ^/decathlon/.*$ 的内容重定向到 /decathlon/。这意味着 http://decathlon.ga/login/login 重定向到 http://decathlon.ga/decathlon/login/login,这似乎是错误的。

您需要重写您的第二个 RewriteCond 和您的 RewriteRule,但如果没有更多信息,就不可能猜出它们应该是什么。

您显示的规则是不做任何外部重定向,这只是一个内部重写。因此,在路由到 /decathlon 目录期间,POST 数据将被 保留 。我建议您检查执行此重定向的其他规则是否存在。如果 login/login 是真实目录,则外部重定向也可能由其他模块引起,例如 mod_dir

作为替代方案,您甚至可以通过在表单的操作路径中直接使用 /decathlon/ 来避免重写:

<form action="http://decathlon.ga/decathlon/login/login"