设置 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"
我正在使用 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"