Простая проблема с mod_rewrite в Fat Free Framework

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

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

Я смог получить пример «hello world», который запускает только плавник:

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> 

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

Решение – вам нужно RewriteBase чтобы указать на /[dirname]/ вместо just / а затем изменить 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 .

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

В вашем .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/index.php, а не только root /index.php


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

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

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

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

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

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


Заметка о mod_rewrite и FF

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

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

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

в виде

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

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

Причина этого в том, что если вы просто перейдете в каталог / (или /index.php), например, apache servex на странице index.php ….

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

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


для включения mod_rewrite под окнами: откройте ваш 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 …

Я ударился головой об этом в течение 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] 

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

Без шага 3 apache игнорирует любые директивы rewrite. Я обнаружил это, изменив постоянные ссылки на локальную установку 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] 

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