Фильтровать Ajax запросы на уровне.htaccess Как??
В системе все запросы идут на контроллер и там происходит разбор переменных url в нормальный вид. Ajax запросы соответственно тоже туда попадают и принимаются как обычные, а нужно по многим причинам конечно их фильтровать, только проблема в том, что после редиректа .htaccess'om, ни какими средставами php не получается отделить его, все проверки, которыми кишит веб просто не дают результата, т.к. после перенаправления это и есть обычный запрос... Есть ли возможность на htaccess распарсить, еще до попадания в контроллер, и сноса своих переменных? Я уже наверно 20-30 страниц гугла просмотрел - все не то!
1 ответов
Ерунда какая-то. Вне зависимости от того, как mod_rewrite изменил запрос, заголовки остаются целыми.
Вот и проверяй:
public function isXmlHttpRequest()
{
return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
}
public function getHeader($header)
{
if (empty($header)) {
require_once 'Zend/Controller/Request/Exception.php';
throw new Zend_Controller_Request_Exception('An HTTP header name is required');
}
// Try to get it from the $_SERVER array first
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
if (isset($_SERVER[$temp])) {
return $_SERVER[$temp];
}
// This seems to be the only way to get the Authorization header on
// Apache
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
if (isset($headers[$header])) {
return $headers[$header];
}
$header = strtolower($header);
foreach ($headers as $key => $value) {
if (strtolower($key) == $header) {
return $value;
}
}
}
return false;
}
Если же ты не обычный rewrite используешь, а именно редирект, то, как говорится, сам виноват. Разве что, попробуй в правило с редиректом добавить:
RequestHeader set MY_AJAX "ajax"
Попробуйте
RewriteRule бла-бла-бла [E=SOME:true]
где надо "пометить" запрос.
И в скрипте будет видно $_SERVER['SOME']
Как правило, можно распознать по $_SERVER['HTTP_X_REQUESTED_WITH']
Но проще, лучше и понятней при написании клиентских скриптов изначально в запрос добавлять дополнительный параметр ajax = true. Можно вообще отправлять на отдельный контроллер все ajax-запросы.
Вот мне так и нужно! На отдельный контроллер их слать, подскажите что нужно в htaccess прописать.
RewriteEngine On
DirectoryIndex control.php
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) exmpl/control.php?do=$1 [L]
Тут разбор url в ЧПУ, я не очень силен в этом, к сожалению, подскажите пожалуйста как например аякс переправлять на exmpl/control-ajax.php?do=$1 [L] это будет лучший вариант, если так возможно, не хочу через php доп. скрипт дописывать. Вы написали про параметр ajax=true, вы имеете ввиду это прикреплять в момент отправки? т.е. в js? но это ведь не безопасно вроде как.