2011-01-02 7 views
6

Próbuję skonfigurować i dowiedzieć się Fat Free Framework dla PHP. http://fatfree.sourceforge.net/Prosty problem z mod_rewrite w Fat Free Framework

Jest dość prosty w konfiguracji i uruchamiam go na moim komputerze za pomocą MAMP.

udało mi się dostać na przykładzie 'hello world' działa tylko fin:

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

Ale gdy próbuję dodać w drugiej części, która ma dwie trasy:

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(); 

pojawia się błąd 404, gdy próbuję drugi URL:/o

Nie wiem, dlaczego jedno z poleceń mod_rewrite będzie pracować, a nie inny.

Poniżej jest moje .htaccess file:

# 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> 
+0

Czy działa FF? – CarpeNoctumDC

+0

@ DC Bez powodzenia, nie jestem pewien, gdzie nawet zadzierać, aby to naprawić. – ian

+0

Nowa strona beztłuszczowa: http://bcosca.github.com/fatfree/ – stillstanding

Odpowiedz

11

Więc mój przyjaciel faktycznie pomógł mi się z tym problemem. Wpadłem na dokładnie ten sam problem, ale zasadniczo używam MAMP i mam wszystkie moje pliki Fat Free w obrębie katalogu fatfree wewnątrz htdocs z MAMP.

Rozwiązanie to trzeba mod RewriteBase aby wskazać /[dirname]/ zamiast tylko / a następnie zmienić RewriteRule do /[dirname]/index.php.

Moje .htaccess wygląda następująco:

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

Potem jest ustawiony, można śledzić przykład w beztłuszczowe doc dokładnie i będzie działać jak czar. To mnie wkurzyło przez chwilę i to było wszystko, czego potrzebowałem. Ponadto, jeśli używasz MAMP, edytować plik httpd.conf w /Applications/MAMP/conf/apache i należy zmieniać co następuje:

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

do

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

Zasadniczo zmienić None do All.

+1

Dzięki, że próbowałem tego wszystkiego, ale wciąż nie miałem szczęścia. '/' Działa ale nie '/ anything' – ian

+0

wystarczyły dla mnie. Dzięki tak dużo. [code] RewriteEngine On RewriteBase/fatfree/ RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% { REQUEST_FILENAME}! -d RewriteRule . */fatfree /index.php [l, QSA] [/ kod] [kod] require_once '/app/fatfree-2.0.0/lib/base.php'; F3 :: trasy ('GET /' "hom mi'); \t Funkcja Strona główna() { \t \t echo "Witaj, świecie!"; \t} F3 :: run(); [/ code] – Justin

+0

dziękuję, że nie udało mi się sprawić, żeby działało, przechodząc do innej struktury – Geomorillo

1

W swojej .htaccess masz 'index.php' potrzebuje slash ... '/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]  

inaczej kiedy próbuje przepisać/about/będzie szukać /about/index.php zamiast tylko root/index.php


Po prostu miałem inną myśl. "Możliwe", że mimo to mod_rewrite jest w stanie, może być dziwactwo z serwerem, co powoduje, że nie będzie przepisywane ..

Jeśli poniższa globalna trasa nie działa, możesz chcieć przetestować przepisać

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

można również spróbować globalną trasę dla katalogu

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

ale to oznacza anythin pod domain.com/about/ ...... nic ... będzie rerou Te do około funkcji ...


notatkę o mod_rewrite i FF

Jak pan powiedział, FF jest givikng ci 404, ponieważ spodziewa '/' zamiast '/index.php' ... jednak jest to index.php który spodziewa różnicę ..

Aby wykazać, że uważam, że można powielać swoje

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

jak

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

a strona powinna wyświetlić ...

Powodem tego jest, jeśli tylko przejść do/katalogu (lub /index.php) eitehr sposób apache servesx strony index.php ... .

Mod_rewrite pozwala na przekierowanie/about i przekierowanie go do index.php. Więc jeśli twoja reguła przepisywania nie działa, to przekierowanie/przepisanie się nie stanie, a dostaniesz 404 ...

Jak wspomniałem powyżej, przetestuj mod_rewrite z regułą google .. a następnie spróbuj przejść do http://localhost:80/google , jeśli nie przekieruje Cię do google, wtedy twój silnik przepisywania nie działa ... (prawdopodobnie problem z konfiguracją systemu Windows ..)


w celu włączenia mod_rewrite pod oknami: Open Your http.conf Znajdź linię:

#LoadModule rewrite_module modules/mod_rewrite.so 

usunąć znak komentarza (#) z linii ... więc masz: moduły LoadModule rewrite_module/mod_rewrite.so Zapisz plik i ponownie uruchomić apache ..

Alternatly .. Myślę, że można po prostu powiedzieć:

LoadModule rewrite_module modules/mod_rewrite.so 

na początku pliku .htaccess ...

+0

To, co myślałem, ale zmiana nie działała. – ian

+0

Jaki jest adres, którego używasz, aby uzyskać dostęp? domain.com/about/index.php lub domain.com/about lub? – CarpeNoctumDC

+0

to także twój dokładny plik htaccess lub używasz ? – CarpeNoctumDC

2

Jeśli używasz F3 w podfolderze, musisz zmienić RewriteBase w. Htaccess, aby dopasować folder.

1

Uderzyłem w to przez 2 dni. Debugowałem zarówno htaccess, jak i php. Rzeczywisty problem polega na tym:

Jeśli kopiowany plik .htaccess z ich fatfree-1.4.4 zip download, jego nie .htaccess jego .htaccess Wystarczy zmienić nazwę tego pliku .htaccess z (brakuje). htaccess i wszystko będzie działać idealnie, jak wspomniano w dokumencie !!!

Używam tego .htaccess działa dla folderów non-korzeniowych zbyt

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] 
+0

Używam MAMP i nie można uruchamiać nazw plików za pomocą '.' na Mac OS, wypróbowałem .htaccess ale bez powodzenia. – ian

+0

, więc jesteś w stanie użyć. Htaccess, czy nie? bez htaccess ta rzecz nie zadziała. Nigdy też nie pracowałem na Macu, więc naprawdę nie mogę tu pomóc :( – shikhar

+0

Otwórz Terminal, cd do katalogu z htaccess i wpisz mv htaccess .htaccess – Rikki

0

Ta odpowiedź może być dla ciebie za późno, ale wczoraj miałem ten sam problem.

Wygląda na to, że problem polega na tym, że apache nie przepisuje adresów URL. Miałem ten sam problem, gdy próbowałem uruchomić F3 na OSX 10.7 - trasa "GET /" zadziałałaby, ale nie "GET /foo", ponieważ indeks F3 index.php był w podsieci dla localhost/F3. Moje rozwiązanie było następujące:

  1. Upewnij się, że .htaccess jest ustawiony tak, jak masz.
  2. zapewniają mod_rewrite.so została włączona w httpd.conf Apache
  3. upewnić się, że ustawienie AllowOverrideAll (mój był brak) do katalogu stron internetowych w httpd.conf (w dalszej części pliku).
  4. restart apache

Bez kroku 3, apache będzie ignorować żadnych dyrektyw przepisywania. Odkryłem to, zmieniając permalinki w lokalnej instalacji wordpress i nie udało im się wskazać, że problem dotyczył konfiguracji apache, a nie F3.

1

Uwaga: Jeśli chcesz wywołać swój plik .htaccess w inny sposób, możesz zmienić nazwę pliku za pomocą dyrektywy AccessFileName. Na przykład, jeśli wolisz nazwać plik .config następnie można umieścić następujące informacje w pliku konfiguracyjnym serwera:

AccessFileName .config 

here

0

biegnę to ze stosu MAMP. Zmieniłem nazwę ich folderu z "fatfree-master" na "f3". Umieściłem ten folder obok htdocs. Ich plik .htaccess (obecnie w MAMP/f3/lib) pozostaje nietknięty.

Moje .htaccess (w moim internetowej podfolderze) jest standardem Grafika, jak na ich przykładzie:

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

Nadzieja to pomaga kogoś.

+0

Nie jest jasne, przynajmniej dla mnie, w jaki sposób odnosi się to do pytania. Czy mógłbyś rozwinąć? –

+0

@Alex odpowiem tylko raz. Znalazłem ten post, ponieważ miałem problemy z pobraniem ich próbki do pracy, jak to zawstydzająco wyjaśniłem powyżej (chociaż mogło być użyteczne, gdyby zawierały tagi, ale moje złe). Następnie w ich przewodniku nie zawsze jest jasne, do którego pliku .htaccess się odnoszą. Więc też to wyjaśniłem. W końcu nie oferowali żadnych instrukcji specyficznych dla MAMP/XAMP. Dlatego uważam, że jest to stosowne i być może pomocne w doradzaniu, w jaki sposób wdrożyłem ich strukturę. – MannyC