2011-01-09 7 views
7

Этот вопрос очень похож на: Is it possible to redirect post data? (спросил ухаживатель), но этот ответ, похоже, не работает для меня.Redirect POST htaccess

У меня есть форма:

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

и внутри домена аддон, (test.com аддон), существует подобласть (. А), так и внутри есть у меня файл 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 не работает.

Заранее спасибо

+1

Почему вы ** ** перенаправлять клиента тогда? Удалите правило перенаправления (или просто удалите флаг перенаправления), если вы не хотите перенаправлять, тем самым потеряете данные POST. – zerkms

+0

Возможный дубликат [.htaccess - возможно ли перенаправить почтовые данные?] (Http://stackoverflow.com/questions/358263/htaccess-is-it-possible-to-redirect-post-data) –

ответ

17

Ваш «добавить завершающий слэш» правило заставляет редирект заголовка:

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

Я часто вижу что люди используют только сравнения на основе регулярных выражений, но не строковые: 'RewriteCond% {REQUEST_METHOD}! = POST'. Зачем? ;-) – zerkms

+1

@zerkms fair point :) Честно говоря, я даже не знал, что обозначение возможно. Спасибо, исправлено –