Вопрос

Я пытаюсь настроить и изучать безразличную рамку для PHP.http://fatfree.sourceforge.net/

Настройка довольно просто, и я запускаю его на своей машине, используя MAMP.

Я смог получить пример «Hello World». Just Fin:

require_once 'path/to/F3.php';
F3::route('GET /','home');
    function home() {
        echo 'Hello, world!';
    }
F3::run();

Но когда я пытаюсь добавить во вторую часть, которая имеет два маршрута:

require_once 'f3/f3.php';

F3::route('GET /','home');
function home() {
    echo 'Hello, world!';
}

F3::route('GET /about','about');
function about()
{
    echo 'About Us.';
}

F3::run();

Я получаю ошибку 404, если попробую второй URL: /О

Не уверен, почему один из mod_rewrite Команды будут работать, а не другие.

Ниже мой .htaccess файл:

# Enable rewrite engine and route requests to framework
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

# Disable ETags
Header Unset ETag
FileETag none

# Default expires header if none specified (stay in browser cache for 7 days)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A604800
</IfModule>
Это было полезно?

Решение

Так что мой друг действительно помог мне с этой проблемой. Я столкнулся с той же проблемой, но в основном я также использую MAMP и имею все свои безразличные файлы в fatfree DIR В рамках HTDOCS MAMP.

Решение в том, что вам нужно модифицировать RewriteBase указать на /[dirname]/ вместо просто / а затем изменить RewriteRule к /[dirname]/index.php.

Мой .htaccess выглядит так:

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

После того, как это установлено, вы можете точно следовать примеру в DOC без жира, и это будет работать как очарование. Это на некоторое время озадачило меня, и это было все, что ему было необходимо. Кроме того, если вы используете MAMP, отредактируйте httpd.conf Файл в /Applications/MAMP/conf/apache И обязательно измените следующее:

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>

к

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
</Directory>

В основном изменение None к All.

Другие советы

Если вы запускаете F3 в подпапке, вы должны изменить перезаписи в .htaccess, чтобы соответствовать папке.

В вашем .htaccess у вас есть «index.php».

# Enable rewrite engine and route requests to framework
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l          
RewriteCond %{REQUEST_FILENAME} !-f          
RewriteCond %{REQUEST_FILENAME} !-d          
RewriteRule .* /index.php [L,QSA]    

В противном случае, когда он пытается переписать /о /о /он будет искать /about/index.php вместо просто root /index.php


У меня только что была еще одна мысль ... возможно, «возможно, что mod_rewrite интуитивно», может быть причуда с сервером, заставляя его не переписать ..

Если мировой маршрут ниже не работает, вы можете проверить переписывание

RewriteRule ^/google http://www.google.com [L,NC];

Вы также можете попробовать глобальный путь для каталога

F3::route('GET /about/*','about');

Но это означает, что кто -нибудь в Domain.com/about/ ...... что -нибудь ... будет перенаправить функцию о ...


Примечание о mod_rewrite и ff

Как вы сказали, FF является вам 404, потому что он ожидает '/' вместо '/index.php' ... однако, это index.php, который ожидает разницы ..

Чтобы продемонстрировать это, я считаю, что вы можете дублировать свой

F3::route('GET /','home');

в качестве

F3::route('GET /index.php','home');

и страница должна отображаться ...

Причина этого в том, что если вы просто перейдете на / каталог (или /индекс.php) eitehr Way Apache обслуживает страницу index.php ....

Mod_rewrite позволяет перенаправить /abled и перенаправить его на index.php .. так что если ваше правило перезаписывания не работает, то перенаправление /переписывание не произойдет, и вы получите 404 ...

Как я упоминал выше, проверьте MOD_REWRITE с правилом Google .. затем попробуйте перейти к http://localhost:80/googleЕсли он не перенаправляет вас в Google, то ваш двигатель переписывания не работает ... (вероятно, проблема с конфигурацией Windows ..)


Чтобы включить mod_rewrite под Windows: Откройте http.conf Найдите эту строку:

#LoadModule rewrite_module modules/mod_rewrite.so

Удалите отметку комментариев (#) из строки ... так что у вас есть: загрузка модуля rewrite_module modules/mod_rewrite.so Сохранить файл и перезагрузить Apache ..

Альтернатив .. Я думаю, вы можете просто сказать:

LoadModule rewrite_module modules/mod_rewrite.so

В начале вашего файла HTACCESS ...

Я ударил голову об этом в течение 2 дней. Я отлаживал HTACCESS и PHP оба. Фактическая проблема заключается в следующем:

Если вы скопировали файл .htaccess из их fatfree-1.4.4. .htaccess это htaccess (. отсутствует) Просто переименовать этот файл в.

Я использую это .htaccess работает тоже для неровных папок

Options -Indexes 
IndexIgnore *    

RewriteEngine On
RewriteCond $1 !^(index\.php|images|main\.css|form\.css|favicon\.ico|robots\.txt|sitemap\.xml)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Примечание. Если вы хотите позвонить в свой файл .htaccess Что -то еще, вы можете изменить имя файла, используя директиву AccessFilename. Например, если вы предпочитаете позвонить в файл .config, вы можете поместить следующее в файле конфигурации вашего сервера:

AccessFileName .config  

здесь

Этот ответ может быть слишком поздно для вас, но вчера у меня была та же проблема.

Похоже, проблема в том, что Apache не переписывает URL -адреса. У меня была такая же проблема, когда я пытался получить F3 на OSX 10.7 -GET /«Маршрут будет работать, но неGET /foo«Поскольку f3 index.php был в поддире для Localhost/F3. Мое решение было:

  1. Убедитесь, что .htaccess был установлен, как и у вас.
  2. Убедитесь, что mod_rewrite.so был включен в httpd.conf от Apache.
  3. Убедитесь, что вы установили AllowOverride All (У меня не было) для вашего веб -каталога на httpd.conf (дальше вниз по файлу).
  4. перезапустить Apache

Без шага 3 Apache игнорирует любые директивы переписывания. Я обнаружил это, изменяя постоянные ссылки на локальной установке WordPress, и они не удалось указать, что проблема была конфигурацией Apache, а не F3.

Я запускаю это со стеком MAMP. Я переименовал их папку от «Fatfree-Master» до «F3». Я положил эту папку рядом с HTDOCS. Их файл .htaccess (теперь внутри MAMP/F3/LIB) остается нетронутым.

Мой .htaccess (в моей веб -подпапке) является стандартом запаса в соответствии с их примером:

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

Надеюсь, это кому -то поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top