Не удается отобразить простую страницу при использовании FatFree и PHP5.3 на Apache 2.2.

Я использую Apache 2.2 и PHP 5.3. Я пытаюсь использовать структуру Fatfree для маршрутизации. Мой файл index.php выглядит так:

<?php
require_once 'f3/lib/base.php';

F3::route('GET /','home');
function home() {
    echo F3::render('templates/index.html');
}

F3::route('GET /@pagenum','mainlist');
function mainlist() {
    F3::set('pagenum', @pagenum);
    echo Template::serve('templates/index.html');       
}

F3::run();

?>

Если я перейду на «http://localhost:8080/», он правильно отобразит файл templates/index.html, что означает, что PHP и Fatfree работают. Но если я перейду на «http://localhost:8080/1», это не сработает. Я получаю следующую ошибку:

Not Found
The requested URL /1 was not found on this server.

Если я изменю первую часть на

F3::route('GET /anotherthing','home');
function home() {
    echo F3::render('templates/index.html');
}

тогда "http://localhost:8080/anotherthing" тоже не работает. Он работает только на руте. Любая помощь?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ Это настраивается в httpd.conf.

DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
Options -Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from All
</Directory>

Modrewrite включен:

LoadModule rewrite_module modules/mod_rewrite.so

И .htaccess выглядит так:

RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]

База «/fatfree/» связана с ответом на другой вопрос SO, у которого была аналогичная проблема.

Я также пробовал со следующим .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

person Tony    schedule 12.07.2012    source источник
comment
У вас включен mod_rewrite и установлены ли правила (т.е. в файле .htaccess)?   -  person madflow    schedule 12.07.2012
comment
Так где же вы index.php? В DocumentRoot/fatfree или в корне документа?   -  person madflow    schedule 12.07.2012
comment
Он находится в корне документа. Я добавил больше информации к вопросу.   -  person Tony    schedule 12.07.2012
comment
Если он находится в корне документа, вам не нужен суффикс /fatfree. Итак, вы следовали правилам: bcosca.github.com/fatfree и попробовали предложенный .htaccess и Конфигурация апача? Просто чтобы убедиться: вы перезапустили Apache после редактирования файла httpd.conf (или того, что он называется на вашем сервере WAMP)?   -  person madflow    schedule 13.07.2012
comment
Да. Сейчас у меня нет суффикса /fatfree. Я использую предложенный Apache и htaccess. Я перезапустил Apache. Это похоже на странную проблему, потому что это работает для корня (он перенаправляет меня), но не для другого маршрута.   -  person Tony    schedule 13.07.2012
comment
F3::set('pagenum', @pagenum); выглядит неправильно. Это вызовет синтаксическую ошибку. Файлы index.php и .htaccess находятся в папке "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"? Они оба должны быть в одном и том же месте. Кроме того, если сообщение The requested URL /1 was not found on this server. не выделено курсивом, то ошибка исходит от Apache, а не от Fat-Free.   -  person bcosca    schedule 22.07.2012


Ответы (6)


Вам действительно нужно посмотреть логи вашего сервера. Если вы не включили их, я бы посоветовал вам сделать это. У Apache действительно хорошие логи. Если вы видите записи журнала и не получаете ошибку сервера 500, то обычно это не mod_rewrite.

Если вы хотите убедиться, что модуль перезаписи загружен (в Linux), попробуйте следующее:

[root@server ~]# httpd -M 2>&1|grep перезаписать

Он вернет что-то на этот счет:

rewrite_module (общий)

person taco    schedule 24.08.2012
comment
Спасибо! Я использовал wamp и просто раскомментировал mod_rewrite.so в httpd.conf - person mdanishs; 02.04.2015

Включить механизм перезаписи и маршрутизировать запросы к фреймворку

Попробуйте это, это исправление работает для меня. Измените файл .htaccess, как показано ниже.

RewriteEngine On

# Some servers require you to specify the `RewriteBase` directive
# In such cases, it should be the path (relative to the document root)
# containing this .htaccess file
#
#RewriteBase /

RewriteRule ^(lib|tmp)\/|\.(ini|php)$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [END,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
person ling cao    schedule 09.12.2014

Вы можете попробовать этот .htaccess:

RewriteEngine On
RewriteRule ^(app|tmp)\/|\.ini$ - [R=404]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
person SERAJ    schedule 26.11.2020

В корне fatfree есть файл config.ini

[globals]
DEBUG=3
UI=ui/

DEBUG=3 позволит f3 показать все внутренние ошибки, а изменение значения пользовательского интерфейса важно, поскольку вам нужно хранить свои шаблоны в папке пользовательского интерфейса, поэтому в этой конфигурации вы должны изменить его на свой собственный каталог шаблонов.

Согласно документации f3, соглашение о статических вызовах (F3::xxx) устарело, лучшим вариантом является вызов экземпляра F3 (например, $f3->xxx).

Также проверьте журналы ошибок HTTPD на наличие ошибок, связанных с mod_rewrite и .htaccess.

--

person Nishad TR    schedule 21.06.2013

Вам нужно только это в вашем index.php

$f3=require('lib/base.php');
$f3->config('config/config.ini');
$f3->config('config/routes.ini');
$f3->run();

И затем в вашем config.ini:

[globals]
DEBUG=3
UI=views/

маршруты.ini:

[routes]
GET /=ControllerName->methodThatRenderTheView
GET /@pagenum=ControllerName->methodThatRenderTheView

Базовый контроллер для визуализации вашего представления:

class ControllerName {
   public function methodThatRenderTheView() {
      $this->f3->set('view', 'template.htm');
   }
}
person Crossmax    schedule 25.06.2013

Раньше у меня была такая же проблема, как у вас.

Моя запись DocumentRoot в httpd.conf выглядит так:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

Используя эти директивы .htaccess:

RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]

Пара с mod_rewrite работает правильно с моей стороны. У меня самые последние f3 и wamp на сегодняшний день.

person Neill Lima    schedule 14.08.2014