Ajax-запрос к php-файлу со строкой запроса вызывает 404 - PullRequest
2 голосов
/ 25 сентября 2010

Если вы хотите воссоздать ошибку, перейдите на www.tlcnz.com и нажмите на ссылку связаться с нами в горизонтальном меню под заголовком.Чтобы сайт не работал полностью, я полностью удалил строку запроса из всех других ссылок и заменил их отдельными файлами для каждого - кроме ссылки на контактную форму.Мне нужно общее решение для некоторых функций, которые использует файл menu.swf.Плюс это было красиво и элегантно.Раньше все это работало ... Я озадачен тем, как мне удалось это сломать.

Мой Javascript здесь .Вот PHP, который я использую.Это bloader.php, который Ajax возвращает с 404 на

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
<?PHP require_once('blog/wp-blog-header.php');?>
<?PHP 
 $name = $_GET['name'];
query_posts('pagename='.$name);while (have_posts()): the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content(''); ?>
<?php endwhile; ?>

А вот about.php, который работает и точно такой же.Это просто не принимает строку запроса.

<?PHP require_once('blog/wp-blog-header.php'); ?>
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
<?PHP $name = "about";
query_posts('pagename='.$name);while (have_posts()): the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php the_content(''); ?>
<?php endwhile; ?>

Ответы [ 3 ]

1 голос
/ 25 сентября 2010

Я решил это. Это было имя переменной. Я предполагаю, что мой недавно обновленный WordPress (который является <?PHP require_once('blog/wp-blog-header.php');?>, каким-то образом заставляет это конкретное имя переменной бросать 404, когда оно включено в строку запроса. Все это немного вуду, хотя

0 голосов
/ 03 октября 2010

Какое новое имя переменной?Используете ли вы JS-фреймворк, такой как jQuery или MooTools?

Почти та же проблема, но я думаю, это связано со значением переменной, а не с именем.Позвольте мне объяснить: я использую пользовательский файл шаблона для включения Ajax (и загружаю wp-blog-header.php), как это делает ваш bloader.php .

Javascript обнаруживает внутренние ссылки (Это обеспечивает совместимость, когда JS не активирован) и конвертирует эти URL-адреса, чтобы они указывали на загрузочный php, например:

var BlogURL = "http://www.domain.com";
var TemplateURL = "http://www.domain.com/wp/wp-content/themes/mytheme";
if(PassedUrl.indexOf("?page_id=") != -1) {
                        AjaxUrl = PassedUrl.replace(BlogURL + "/?page_id=",TemplateURL + "/pagecontent.php?pageid="); 
                        }
                        else {
                        AjaxUrl = PassedUrl.replace(BlogURL + "/",TemplateURL + "/pagecontent.php?pagename="); 
                        }

Затем pagecontent.php обрабатывает переменную строки запроса URL-адреса, чтобы перехватить содержимое.Подлежит включению:

<?PHP define('WP_USE_THEMES', false);
$wp_blogheader = ("../../../wp-blog-header.php");
require_once($wp_blogheader);
if(isset($_GET['pageid'])) {
    $pag = $_GET['pageid'];
}
elseif(isset($_GET['pagename'])) {
    $pag = $_GET['pagename'];
}

global $post;

// TRANSLATION FUNCTIONS OMITTED

if(isset($_GET['p'])) {
    $page_data = get_post( $pag );
}
if(isset($_GET['pageid'])) {
    $page_data = get_page( $pag );
}
elseif(isset($_GET['pagename'])) {
    if(function_exists('qTranslateSlug_get_page_by_path')) {
    $pag = qTranslateSlug_get_page_by_path($pag, $q_config['language']);
    $page_data = get_page( $pag );}
    else {    $page_data = get_page_by_path( $pag );}
}

$content = $page_data->post_content; // Get Content
$title = $page_data->post_title; // Get title
echo do_shortcode($content);
?>

Поскольку я использую плагин qTranslate, чтобы на всех страницах было доступно содержимое на нескольких языках, необходимо проверить некоторые функции.Вот где я получаю 404 ошибки.По сути, функции перевода убирают код языка из переменной имени страницы, переданной в строке URL, чтобы получить страницу по умолчанию (единственную, которая действительно существует).Поэтому этот языковой код хранится и применяется в php для фильтрации содержимого по соответствующему языку (поскольку в pagecontent.php он начинается со значения по умолчанию).

То есть, когда URL-адрес вызова Ajax - www.domain.com / wp / wp-content / themes / mytheme / pagecontent.php? pagename = my_page / my_subpage это работает

, но когда это www.domain.com/wp/wp-content/themes/mytheme/pagecontent.php?pagename=en/my_page/my_subpage выдает ошибку 404. Ничего не отображается.

После некоторого отладочного тестирования единственным отличием было значение переменнойв URL ввод $pag = $_GET['pagename']; для функции перевода.На самом деле вывод (до запроса БД) такой же, правильный, как и должно быть в соответствии с назначением функции.

Самое странное, что консоль Firebug показывает 404 (как сервер).доступ к журналу), но в необработанном тексте ответа и вкладках html распечатывается правильная страница! Более того, при открытии www.domain.com/wp/wp-content/themes/mytheme/pagecontent.php?pagename= ru / my_page / my_subpage в другом окне, он отображает (журнал статус html 200, а не 404).Очевидно, что изменение переменной «pagename» на «page_name» не имеет никакого эффекта.

Все, что раньше работало нормально до обновления до WP 3.0.1, заставляет меня думать, что мой Javascript и мой пользовательский php для включения / перевода являютсявсе еще правильно, когда что-то в новой версии WP могло бы предварительно проанализировать пользовательскую строку запроса и заблокировать ее в соответствии с критериями страницы по умолчанию.

Однако я все еще не могу понять, как и в каком случаепроблема с php / ошибка в написании 404 XMLHttpRequest.

0 голосов
/ 25 сентября 2010

Не уверен, если это связано или даже оригинал: require_once('blog/wp-blog-header.php'); выводит ли что-нибудь (включая пустые строки)?

header () должен быть вызван перед любым выводом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...