Чистые URL-адреса Drupal случайным образом ломаются для произвольных путей

Я все сделал правильно. На моем сервере включен mod_rewrite, для моего пути к виртуальному хосту AllowOverride установлено значение All, и у меня есть файл .htaccess с такими же правилами перезаписи, как и у всех. Но у меня проблемы с доступом к некоторым страницам с использованием их чистых URL-адресов. Таким образом, для 90% страниц чистые URL-адреса работают нормально. Но для этих 10% их нет.

Я проверил, существуют ли эти страницы — они существуют. Проверил, доступны ли они с помощью index.php?q=[path] - и они есть. Они недоступны только через чистые URL-адреса.

Может ли кто-нибудь помочь мне с этой тайной?


person picardo    schedule 17.06.2010    source источник


Ответы (2)


Поскольку вы можете получить доступ к своим страницам через q=path/to/menu/item, становится ясно, что виноват mod_rewrite, а не Drupal.

Чтобы отладить то, что происходит с вашим переписыванием, включите журнал перезаписи. и tail -f во время запроса проблемных страниц, или, альтернативно, print_r($_GET) в верхней части index.php или page.tpl.php, чтобы увидеть, что на самом деле запрашивается.

Если вам удобно размещать здесь свой потенциально конфиденциальный .htaccess, сделайте это, и мы сможем просмотреть его, чтобы вы могли увидеть, есть ли какие-либо неправильные конфигурации.

person cam8001    schedule 17.06.2010
comment
Хорошо, я сделал print_r($_GET). Вот что я вижу: Массив ( [q] =› error/HTTP_NOT_FOUND.html.var ) Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены (вывод начинается с X:\Dropboxen\Home\My Dropbox\Sites\drupal\ index.php:4) в X:\Dropboxen\Home\My Dropbox\Sites\drupal\includes\bootstrap.inc в строке 1369 - person picardo; 23.06.2010

mod_rewrite имеет несколько давних ошибок, которые искажают URL-адреса по пути (есть ли в ваших проблемных URL-адресах какие-либо escape-символы?). Я не знаю, делает ли это Drupal, но в других PHP-приложениях мне приходилось добавлять код для повторной перезаписи после достижения правильной точки входа.

К сожалению, Drupal не может использовать путь поиска в PATH_INFO (как это делают многие другие приложения), в противном случае вы могли бы использовать mod_alias, который намного проще и надежнее.

person George Steel    schedule 17.06.2010
comment
Я так не думаю. Вот один из путей, например: node/add/product. Это так же ясно, как они приходят. - person picardo; 17.06.2010
comment
Я имел в виду, что ваш URL-адрес переписывается (по mod_rewrite) на index.php?q=node/add/product с путем в строке запроса вместо index.php/node/add/product с путем в качестве пути. - person George Steel; 18.06.2010