Как сохранить данные POST с помощью ajax-запроса после перенаправления.htaccess?


. htacesss

RewriteCond %{REQUEST_URI} ^/api/(.+)$
RewriteRule ^api/(.+)$ /index.php?api=%1 [QSA,L]

Пример запроса URL-адреса ajax: 'http://hostname.com/api/ext/list.php?query=de '

Я хочу иметь возможность перенаправлять URL-адреса в этом формате на следующий индекс.php?api={requested_filename}¶m1=значение1¶m2=значение2...

Поскольку весь сайт обрабатывается с помощью процесса начальной загрузки в index.php который имеет часть маршрутизации, загружающую конфигурации, шаблоны и т. Д.

Когда я, например, пытаюсь использовать код jquery, данные POST теряются после перенаправлять.

$.ajax({
            url: '/api/contact.php',
            type: 'POST',
            data: { 
                email: $("#contactEmail").val(),
                name: $("#contactName").val(),
                message: $("#contactMessage").val()
                                // etc ...
            }
});

Я читал, что вы не можете сохранять данные при перенаправлении http. Но как все структуры избегают этого? Я кодировал во многих, и каждый из них загружается через index.php и в файле .htaccess есть правила перезаписи для включения красивых URL-адресов. Так, например, в Yii я бы назвал URL-адрес "api/uploads/latests.json" с некоторыми данными POST, и контроллеры на серверной части получили бы эти данные. Что я здесь упускаю?

Примечание: Я протестировал [P] параметр mod_rewrite, и я думаю, что на этом сервере не включен mod_proxy.

Author: Keeper Hood, 2012-12-15

3 answers

Существует разница между перезаписью и перенаправлением.

Перезапись - это модуль apache (и других серверов), который будет следовать набору правил/правил для сопоставления запрошенного URL-адреса с файлами на сервере (например, загрузчик переписывает все URL-адреса в один файл, обычно index.php . mvc может сопоставлять/модель/контроллер/uri представления с index.php это вызывает соответствующие файлы mvc).

Перенаправление фактически изменяет страницу, на которой вы находитесь. Кто-то запрашивает страницу A.php и на этой странице написано "что вы ищете находится на B.php "и поэтому ваш браузер переходит на B.php .

Перезапись сохранит параметры публикации, потому что URL-адрес не изменится. Перезапись просто изменит запрашиваемый сценарий, но для браузера это выглядит так, как будто страница все еще существует по запрошенному URL.

Перенаправление не сохранит параметры публикации, потому что сервер полностью перенаправит вас на другую страницу.

Похоже, что вы пытаетесь сделать переписывание, а не перенаправление. У вас не должно быть проблемы с получением параметров записи.

Чтобы исправить это, как вы регистрируетесь index.php что нет никаких параметров записи? Вы уверены, что диспетчер, которого вы ожидаете, будет вызван?

 4
Author: Jonathan Kuhn, 2012-12-14 21:52:56

Все почтовые данные теряются при перенаправлении. Невозможно сохранить его с помощью правил перезаписи/перенаправления htaccess.

Перенаправление (все 301,302,303), полученное клиентом (все основные браузеры, которые я знаю), рассматривается как новый URL-адрес для отправки запроса GET. Браузеры не будут автоматически привязывать старые параметры публикации к этому URL-адресу, даже если источником перенаправления был запрос на публикацию.

Единственный способ, который я нашел в этом, - это переписать внутренний код и скрыть СООБЩЕНИЕ параметры, чтобы ПОЛУЧИТЬ параметры и вставить их в конец нового URL-адреса. В php вы затем изменяете местоположение заголовка (или любой другой перенаправляющий вызов, который использует выбранная вами библиотека):

header("Location: http://www.example.com/?my_old_post_args=123"); 
exit;
 3
Author: Ray, 2012-12-14 21:41:57

Для любого, у кого есть эта проблема, у меня есть проблема с сэмом, и я использую что-то вроде этого

RewriteRule ^services/MainService/(.*)$ http://193.9.162.91/mobile-feed/mobile.list.news.images.php?original_request=$1 [R=301,L]

Это не будет работать с сообщением ajax, я должен изменить значение перезаписи на

RewriteRule ^services/MainService/(.*)$ http://193.9.162.91/mobile-feed/mobile.list.news.images.php?original_request=$1 [QSA,L]

Эта работа и в файле php у меня есть

$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array
print_r($input);
 1
Author: M.Ali El-Sayed, 2017-10-15 14:43:29