Подтвердить что ты не робот

Можно ли перенаправить почтовые данные?

У меня есть сайт, на котором все запросы перенаправляются молча (через .htaccess) до index.php, а затем PHP используется для отображения правильной страницы (путем разбора REQUEST_URI).

Мне было интересно, возможно ли отправить POST-данные на фальшивый адрес?

В настоящее время у меня есть моя форма...

<form action="/send-mail" method="post">

И мое правило .htaccess...

# redirect mail posting to index
RewriteRule send-mail index.php?send-mail [NC,L] 

My index.php проверяет isset($_GET['send-mail']), который отлично работает.

Однако, похоже, все данные POST должны быть отправлены на него.

Есть ли способ сохранить данные сообщения? Я не хочу использовать GET, потому что он не может отправить столько информации, хотя это может быть не проблема с простой формой запроса.

Вот мой .htaccess для перенаправления на index.php

# serve files and dirs if they exist please, otherwise send to index
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php
4b9b3361

Ответ 1

Попробуйте следующее:

# redirect mail posting to index
     RewriteRule send-mail index.php?send-mail [NC,P]

"P" действует как "L" в том, что он прекращает обработку правил, но также сообщает модулю, что запрос должен быть передан в прокси-модуль неповрежденным (что означает, что данные POST сохранены).

Ответ 2

Вы можете просто перенаправить на index.php, а затем в script, откройте $_SERVER['REQUEST_URI'], чтобы увидеть исходный запрос, с неповрежденной "send-mail".

Кстати, "не могу отправить столько информации" не является основанием для использования POST. Причина использования POST заключается в том, что запрос будет изменять данные на вашем сайте, а не просто извлекать данные.

Предположим, вы разместили гиперссылку на своей странице с запросом GET, например "/delete_user?id=1234", а затем некоторая поисковая система невинно следует по ссылке, индексируя ваш сайт. Поэтому запросы GET не подходят для запросов, которые изменяют данные.

Ответ 3

Пока вы используете только внутреннюю переписку, а не перенаправление HTTP, вы не должны терять POST-данные. Вот правило, которое я использую на своем сайте:

RewriteRule ^(.*)$ index.php/$1 [L]

Попробуйте использовать расширение HTTPLiveHeaders для Firefox (или что-то подобное) и отслеживать весь запрос страницы. Убедитесь, что вы не получаете перенаправление HTTP. Если вы получаете ответ HTTP/1.1 3xx и Местоположение: http://address заголовок, это проблема. Правило перезаписи, которое вы опубликовали, не должно вызывать этого. Если вы перенаправлены, вероятно, есть ошибка в вашем PHP-коде или другом правиле перезаписи, которое применяется.

Ответ 4

Чтобы избежать проблем с некоторыми прокси-серверами и перезаписывать Apache, передайте данные POST или установите заголовок Content-Length: 0 для запросов с пустым телом.

Недавно у меня возникли проблемы с Apache, конвертирующим мой запрос в GET при выполнении POST с пустым телом. Итак, вместо этого:

 curl -X POST https://example.com/api/user/123456789

передать заголовок Content-Length:

 curl -X POST https://example.com/api/user/123456789 -H 'Content-Length: 0'

или передать что-то в теле:

 curl -X POST https://example.com/api/user/123456789 -d ''

Ответ 5

Я хочу перенаправить user_login.php, чтобы использовать дружественный URL-адрес, например /user -login, с данными формы сообщения, и это сработало для меня.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/user_login\.php [NC]
RewriteRule ^ user-login [QSA,R=301]
RewriteRule ^user-login$ user_login.php [QSA,L]

В файле вида

<form action="<?php $siteurl;?>/user-login" method="post" id="user_login">