Я пытаюсь настроить и изучить 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. Мое решение состояло в следующем:
AllowOverride
All
(мой был None) для вашего веб-каталога в httpd.conf (далее по файлу). Без шага 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]
Надеюсь, это поможет кому-то.