Итак, я хочу, чтобы все POST-запросы, сделанные путем отправки формы или через AJAX, были перенаправлены в один единственный файл (например, postManager.php), который находится вне корневого каталога, например:
_post
| ---postManager.php
|
public_html // root directory
| ---file_one.php
| ---file_two.php
Запрос может быть отправлен, например, из file_one.php через $.post("file_two.php");, и для этого требуется в любом случае перейти к postManager.php со всеми данными $_POST, чтобы его можно было обработать. Учитывая, что это виртуальный хостинг, у меня есть доступ только к .htaccess и отсюда я хочу сделать это.
До сих пор я пробовал что-то вроде этого:
RewriteEngine on
RewriteCond %{SERVER_PORT} !443
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^(.*)$ http://%{HTTP_HOST}/..? <-- and that's where I'm lost
Будем признательны за любую помощь в связи с этим с четким объяснением!
По сути, вы можете создать файл php и отправить запрос ajax, чтобы сообщить ему, куда отправлять данные, нет необходимости, чтобы это было чем-то в .htaccess.
@JosephWilliamson хорошо, тогда как установить _post/postManager.php в качестве пункта назначения, если он находится за пределами корневой папки (public_html), откуда на самом деле идет ajax?
вы можете установить абсолютный URL-адрес для запроса ajax "мой домен/postManager.php"






Ваш запрос Ajax должен указывать на местоположение postManager.php. Для этого не нужно изменять файл .htaccess.
Пример:
$.ajax({
url : 'post/postManager.php',
type : 'POST',
data : {},
dataType: 'json',
success : function(data) {}
});
Надеюсь, это поможет.
Так и должно быть, в конце концов, это в основном то, что сказано в первом комментарии.
но важно не упоминать фактический файл назначения в ajax + таким образом, я не могу направить запрос в каталог снаружи public_html понимаете, что я имею в виду?
Это нетрадиционный способ сделать это, но я понимаю, что вы имеете в виду. Вы, вероятно, беспокоитесь о том, что люди будут копаться в этом файле. Есть много способов исправить это, но перенаправление не лучший :(
@BenGarb Я согласен с вами здесь, но я думаю, что перенаправление .htaccess по-прежнему является каким-то безопасным способом скрыть любое расположение исполняемых файлов, не так ли?
@Bohdan Пользователь, не имеющий доступа к вашему серверу, не может увидеть какой-либо php-код, который вы написали, однако вашей главной заботой должен быть кто-то, кто использует это для отправки данных на ваш сервер, но пока вы используете подготовленные операторы и экранируете вход вы не должны слишком беспокоиться
Я предполагаю, что этот файл выполняется из административной части сайта (где вошел пользователь-администратор), особенно если вы выполняете операции, вызывающие базу данных. Если вы делаете это, то вам не о чем беспокоиться.
@JosephWilliamson Недурно
... на самом деле, после определенного количества попыток я получил это кодовое решение:
Итак, вот мой пост ajax, который сделан из любого файла в любой папке проекта, направленного в корневую папку или в любом случае:
$.post( "/" , { variable : "myVar" } );
В этом случае он переходит к mydomain.com, но на самом деле это не так, потому что он наполовину перехватывается перенаправлением .htaccess следующим образом:
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^(.*)$ postManager.php [QSA,L=307]
postManager.php:
print_r($_POST);
И если я запрошу ответ у .done(function(data){console.info(data)});, он мне его даст:
Array ( [variable] => Myvar )
Есть ли у кого-нибудь дополнительные предложения или комментарии относительно этого кода, потому что я не уверен, что он правильный и безопасный, и работает ли он именно так, как я его описал. Заранее спасибо!
Поэтому установите свойство
urlвызова ajax наpostManager.php