7

PHP用のFatFreeFrameworkをセットアップして学習しようとしています。 http://fatfree.sourceforge.net/

セットアップはかなり簡単で、MAMPを使用して自分のマシンで実行しています。

「helloworld」の例をfinだけで実行することができました。

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

しかし、2つのルートがある2番目の部分を追加しようとすると、次のようになります。

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

2番目のURLを試してみると404エラーが発生します:/ about

コマンドの1つが機能し、他のコマンドが機能しない理由がわかりません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>
4

8 に答える 8

11

だから私の友人は実際にこの問題で私を助けてくれました。まったく同じ問題が発生しましたが、基本的にはMAMPも使用しており、すべてのFatFreeファイルfatfreeがMAMPのhtdocs内のdir内にあります。

解決策は、を単にではなく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]

それが設定された後、Fat Freeドキュメントの例に正確に従うことができ、それは魅力のように機能します。これはしばらくの間私を困惑させました、そしてこれはそれが必要としたすべてでした。また、MAMPを使用している場合は、でhttpd.confファイルを編集し、/Applications/MAMP/conf/apache必ず次のように変更してください。

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

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

基本的にに変更NoneAllます。

于 2011-02-21T19:31:47.253 に答える
2

サブフォルダーの下でF3を実行している場合は、フォルダーに一致するように.htaccessのRewriteBaseを変更する必要があります。

于 2011-01-17T10:24:08.340 に答える
1

注:.htaccessファイルを別の名前で呼び出す場合は、AccessFileNameディレクティブを使用してファイルの名前を変更できます。たとえば、ファイル.configを呼び出す場合は、サーバー構成ファイルに次のように記述できます。

AccessFileName .config  

ここ

于 2011-10-20T00:33:33.747 に答える
1

.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だけでなく/about/index.phpが検索されます。


私はちょうど別の考えを持っていました..mod_rewriteがインストールされていても、サーバーに癖があり、サーバーが書き換えられない可能性があります。

以下のグローバルルートが機能しない場合は、書き換えをテストすることをお勧めします

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

ディレクトリのグローバルルートを試すこともできます

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

しかし、それはdomain.com/about/の下のanythinを意味します......何でも...about関数に再ルーティングされます...


mod_rewriteとFFに関するメモ

あなたが言ったように、FFは'/index.php'の代わりに'/'を期待しているのであなたに404を与えています...しかし、違いを期待しているのはindex.phpです。

それを実証するために、私はあなたがあなたの

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

なので

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

ページが表示されます...

この理由は、/ディレクトリ(または/index.php)に移動した場合にapacheがindex.phpページにアクセスするためです。

mod_rewriteを使用すると、/ aboutをリダイレクトして、index.phpにリダイレクトできます。したがって、書き換えルールが機能していない場合、リダイレクト/書き換えは行われず、404...が取得されます。

上で述べたように、Googleルールを使用してmod_rewriteをテストします。次に、Googleにhttp://localhost:80/google リダイレクトされない場合は、に移動してみてください。その後、書き換えエンジンが機能しません...(おそらくWindows構成の問題です。)


Windowsでmod_rewriteを有効にするには:http.confを開きます。次の行を見つけます。

#LoadModule rewrite_module modules/mod_rewrite.so

行からコメントマーク(#)を削除します...次のようになります。LoadModulerewrite_module modules / mod_rewrite.soファイルを保存して、apacheを再起動します。

代わりに..私はあなたがただ言うことができると思います:

LoadModule rewrite_module modules/mod_rewrite.so

htaccessファイルの先頭に...

于 2011-01-03T08:02:56.603 に答える
1

私はこれに2日間頭をぶつけました。htaccessとphpの両方をデバッグしました。実際の問題はこれです:

fatfree-1.4.4 zipダウンロードから.htaccessファイルをコピーした場合、その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]
于 2011-02-11T13:50:09.107 に答える
0

この応答はあなたには遅すぎるかもしれませんが、私は昨日同じ問題を抱えていました。

問題は、apacheがURLを書き換えていないことのようです。OSX 10.7でF3を実行しようとしたときに同じ問題が発生しました。つまり、F3index.phpがlocalhost/ F3のサブディレクトリにあるため、' GET /'ルートは機能しますが、''は機能しません。GET /foo私の解決策は次のとおりです。

  1. .htaccessが設定どおりに設定されていることを確認します。
  2. mod_rewrite.soがapacheのhttpd.confで有効になっていることを確認してください
  3. httpd.conf(ファイルのさらに下)でWebディレクトリを設定していることを確認してくださいAllowOverride All(私のものはNoneでした)。
  4. Apacheを再起動します

手順3がないと、apacheは書き換えディレクティブを無視します。ローカルのワードプレスインストールでパーマリンクを変更することでこれを発見しましたが、問題がF3ではなくapache構成であることが示されて失敗しました。

于 2011-07-11T23:06:54.670 に答える
0

私はこれをMAMPスタックで実行しています。フォルダの名前を「fatfree-master」から「f3」に変更しました。そのフォルダをhtdocsの隣に置きました。彼らの.htaccessファイル(現在はMAMP / f3 / lib内にあります)は変更されていません。

私の.htaccess(私のWebサブフォルダー内)は、例のように標準です。

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

これが誰かを助けることを願っています。

于 2014-07-02T23:01:36.937 に答える
0

同じ問題が発生し、 .htaccessファイルをfatfreeプロジェクトのルートディレクトリに移動することで解決しました。

ルートディレクトリに次のコードを含むファイル.htaccessを作成します

# Enable rewrite engine and route requests to framework
RewriteEngine On

# Some servers require you to specify the `RewriteBase` directive
# In such cases, it should be the path (relative to the document root)
# containing this .htaccess file
#
# RewriteBase /

RewriteCond %{REQUEST_URI} \.ini$
RewriteRule \.ini$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
于 2021-01-07T01:51:27.310 に答える