Простая проблема с mod_rewrite в Fat Free Framework - PullRequest
6 голосов
/ 02 января 2011

Я пытаюсь настроить и изучить Fat Free Framework для PHP. http://fatfree.sourceforge.net/

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

Мне удалось получить пример 'hello world', запустив только 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: / about

Не уверен, почему одна из команд 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>

Ответы [ 7 ]

11 голосов
/ 21 февраля 2011

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

Решение заключается в том, что вам нужно изменить * 1004.* чтобы указать /[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]

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

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

на

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

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

2 голосов
/ 17 января 2011

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

1 голос
/ 20 октября 2011

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

AccessFileName .config  

здесь

1 голос
/ 11 февраля 2011

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

Если вы скопировали файл .htaccess из их zip-загрузки fatfree-1.4.4, это не .htaccess htaccess (отсутствует) Просто переименуйте этот файл в .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]
1 голос
/ 03 января 2011

В вашем .htaccess у вас есть 'index.php', ему нужен слеш ... '/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 /, он будет искать /about/index.php, а не просто корень /index.php


У меня просто возникла другая мысль ... возможно, что altought mod_rewrite установлено, возможно, произошла ошибка с сервером, из-за которой он не переписывает ..

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

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

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

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

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


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

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

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

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

как

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

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

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

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

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


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

#LoadModule rewrite_module modules/mod_rewrite.so

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

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

LoadModule rewrite_module modules/mod_rewrite.so

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

0 голосов
/ 03 июля 2014

Я запускаю это со стеком 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]

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

0 голосов
/ 12 июля 2011

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

Похоже, проблема в том, что 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 (у меня был None) для вашего веб-каталога в httpd.conf (далее по файлу).
  4. перезагрузить apache

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

...