重定向POST htaccess

时间:2011-01-09 10:24:46

标签: php apache .htaccess mod-rewrite forms

这个问题非常类似于: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作为操作。

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

提前致谢

1 个答案:

答案 0 :(得分:18)

您的“添加尾随斜杠”规则会强制执行标题重定向:

 [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]