【问题标题】:Redirect POST htaccess重定向 POST htaccess
【发布时间】:2011-06-06 00:54:26
【问题描述】:

这个问题非常类似于:Is it possible to redirect post data?(之前问过),但这个答案似乎对我不起作用。

我有一个表格:

<form action="http://a.test.com/contact" name="contact" method="post">

在一个附加域内部(test.com 是一个插件),有一个子域 (a.),在其中我有一个文件 item.php 和 .htaccess

我的htaccess如下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php 

# Forces a trailing slash to be added
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

#normal rewrites
RewriteRule ^[~|-]?([a-zA-Z0-9]+)[/]*$ item.php?user=$1 [NC,L]

注意:我将其保留为 [NC,L],因为当我将其更改为 [NC,P] 时,它会给我一个 500 服务器错误。

还有我的 item.php

<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";

无论表单包含什么,$_POST 都是空白的...但是,如果我将 http://a.test.com/item.php?user=contact 作为操作。

一切顺利。 POSTing跳过htaccess,SO上的解决方案似乎不起作用。

提前致谢

【问题讨论】:

标签: php apache .htaccess mod-rewrite forms


【解决方案1】:

您的“添加尾部斜杠”规则强制标头重定向:

 [R=301,L]

标头重定向将丢弃 POST 值。

您将不得不删除该规则,或禁用它以进行 POST 提交:

# Forces a trailing slash to be added

RewriteCond %{REQUEST_METHOD}  !=POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

【讨论】:

  • 我经常看到人们只使用基于正则表达式的比较,而不是基于字符串的比较:RewriteCond %{REQUEST_METHOD} !=POST。为什么? ;-)
  • @zerkms 公平点 :) 老实说,我什至不知道符号是可能的。谢谢,已修复
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2010-09-21
相关资源
最近更新 更多