проблема URL/php path_info

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

Я считаю, что это проблема с htconfig или другим файлом, к которому у меня нет доступа для неправильной настройки на стороне хоста. Возможно, кто-то может пролить свет на то, куда я могу их направить. Мой собственный файл htaccess совершенно пуст:

wwww.testsite.com/index.php/page1

Приведенное выше используется для перехода к index.php, а затем с помощью $_SERVER path_info извлекает страницу1 и получает содержимое, связанное со страницей1, из базы данных и отображает его на странице. Может ли кто-нибудь подтвердить, что я не схожу с ума - что вышеперечисленное должно перейти в index.php, пожалуйста? и, возможно, также объясните, почему URL-адрес теперь считается несуществующим, поскольку он, похоже, не идет на index.php, а на страницу1. Заранее благодарю за любой совет.


person kaliok    schedule 02.11.2011    source источник
comment
Они обновили PHP или Apache?   -  person Patrick    schedule 02.11.2011


Ответы (2)


Может ли кто-нибудь подтвердить, что я не схожу с ума - что приведенный выше [www.testsite.com/index.php/page1] должен перейти на index.php, пожалуйста?

Неа. Это должно искать файл с именем page1 в каталоге index.php в корне документа для www.testsite.com.

Я думаю, что раньше у вас был файл .htaccess, который выглядел примерно так:

RewriteEngine on
RewriteRule ^index.php(.*)$ index.php

Другая возможность заключается в том, что MultiView ранее были включены, а теперь отключены. С MultiViews вы также получаете описанное вами поведение. Если это разрешено хостером, вы можете включить его, просто создав файл .htaccess, содержащий:

Options MultiViews

Если вы поместите файл .htaccess с одним из вышеупомянутых решений в корень вашего документа, вы можете это проверить.

person CodeCaster    schedule 02.11.2011
comment
спасибо кодкастер. Я собираюсь добавить переписываемый код и протестировать его — но просто для спокойствия, не могли бы вы рассказать мне немного больше о нескольких представлениях — я посмотрел ссылку на страницу, которую вы предоставили, но это то, что делается в файле htconfig? - person kaliok; 02.11.2011
comment
Из этой ссылки: MultiViews — это параметр для каждого каталога, что означает, что его можно установить с помощью директивы Options в разделе ‹Directory›, ‹Location› или ‹Files› в httpd.conf или (если AllowOverride установлен правильно) в . htaccess файлы. - person CodeCaster; 02.11.2011
comment
включение опций multiviews дало мне внутреннюю ошибку сервера :( - person kaliok; 02.11.2011
comment
и правило перезаписи, похоже, тоже не решает проблему :( - person kaliok; 02.11.2011
comment
Пожалуйста, покажите, что вы тоже хотите найти решение, и не ждите, что я (или кто-то еще) буду искать вас в Google. внутренняя ошибка сервера options multiview дала мне этот сайт. Короче говоря, ваш хостер должен включить его. Или вы можете попробовать часть mod_rewrite. - person CodeCaster; 02.11.2011
comment
Нет проблем, но что происходит с правилом перезаписи? И можете ли вы получить доступ к журналам ошибок Apache? - person CodeCaster; 02.11.2011
comment
правило перезаписи по-прежнему не работает... Не регистрируется в журнале ошибок как ошибка. Я поговорил с хостинг-провайдером, который подтвердил, что у меня не будет доступа к параметрам мультипросмотра, но пока они занимаются расследованием, я хотел посмотреть, смогу ли я решить проблему с правилом перезаписи (которое я могу использовать, как я использовал их раньше на других сайтах). Переключил его на test.php и соответствующим образом скорректировал правило - все еще не видно :( - person kaliok; 02.11.2011
comment
Теперь попробовал правило перезаписи на другом сайте на том же хосте. Работал нормально - я пришел к выводу, что что-то пошло не так с файлом htconfig хоста. Еще раз спасибо, кодкастер, за вашу помощь. - person kaliok; 02.11.2011

В Apache, если у вас есть AcceptPathInfo on где-либо в соответствующей конфигурации Apache (включая .htaccess, если конфигурация сервера это позволяет) и есть файл /index.php, тогда /index.php/stuff действительно должен перейти к /index.php, а должен установить $_SERVER['PATH_INFO'] до "/stuff". Обработчик сценария CGI и mod_php* делают это даже по умолчанию, так что это должно работать, если только оно не отключено явным образом.

В любом случае, если он сейчас отключен, вы можете снова включить его, добавив AcceptPathInfo on в свой файл .htaccess, если для сайта установлено AllowOverride FileInfo.

Я не даю обещаний относительно других веб-серверов, но PATH_INFO является частью спецификации CGI, поэтому я думаю, что большинство серверов будут иметь аналогичные настройки.

person cHao    schedule 21.12.2011
comment
Возможный способ настроить ваш nginx для работы таким образом описан здесь: stackoverflow.com/questions/8265941/ - person SimonSimCity; 17.02.2012