3

Apache 2.2 と PHP 5.3 を使用しています。ルーティングに Fatfree フレームワークを使用しようとしています。私の index.php ファイルは次のようになります。

<?php
require_once 'f3/lib/base.php';

F3::route('GET /','home');
function home() {
    echo F3::render('templates/index.html');
}

F3::route('GET /@pagenum','mainlist');
function mainlist() {
    F3::set('pagenum', @pagenum);
    echo Template::serve('templates/index.html');       
}

F3::run();

?>

「http://localhost:8080/」にアクセスすると、ファイル templates/index.html が正しくレンダリングされます。これは、PHP と Fatfree が機能していることを意味します。しかし、「http://localhost:8080/1」にアクセスしても機能しません。次のエラーが表示されます。

Not Found
The requested URL /1 was not found on this server.

最初の部分を

F3::route('GET /anotherthing','home');
function home() {
    echo F3::render('templates/index.html');
}

次に、「http://localhost:8080/anotherthing」も機能しません。ルートでのみ機能します。何か助けはありますか?

詳細情報 これは httpd.conf で設定されます

DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
Options -Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from All
</Directory>

Modrewrite が有効になっています:

LoadModule rewrite_module modules/mod_rewrite.so

.htaccess は次のようになります。

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

「/fatfree/」ベースは、同様の問題があった別の SO 質問の回答によるものです。

次の .htaccess でも試しました。

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

6 に答える 6

2

あなたは本当にあなたのサーバーログを見る必要があります。まだ有効にしていない場合は、有効にすることをお勧めします。Apacheには本当に良いログがあります。ログエントリが表示され、500サーバーエラーが発生する場合は、通常、mod_rewriteではありません。

リライトモジュールが(Linuxで)ロードされていることを確認したい場合は、次のことを試してください。

[root @ server〜]#httpd -M 2>&1 | grep rewrite

それはこの効果に何かを返します:

rewrite_module(共有)

于 2012-08-24T22:33:34.640 に答える
1

書き換えエンジンを有効にしてリクエストをフレームワークにルーティングする

これを試してみてください。この修正は私にとってはうまくいきます。以下のコードのように .htaccess ファイルを変更します。

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 /

RewriteRule ^(lib|tmp)\/|\.(ini|php)$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [END,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
于 2014-12-09T13:06:32.817 に答える
0

私はあなたと同じ問題を抱えていました。

httpd.conf エントリの DocumentRoot は次のようになります。

<Directory />
    AllowOverride none
    Require all denied
</Directory>

これらの .htaccess ディレクティブを使用する:

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

mod_rewrite との組み合わせは、私の側では正しく機能しています。私は今日の時点で最新のf3とワンプを持っています。

于 2014-08-14T01:48:13.257 に答える
0

あなたはあなたのindex.phpでそれを必要とするだけです

$f3=require('lib/base.php');
$f3->config('config/config.ini');
$f3->config('config/routes.ini');
$f3->run();

そして config.ini で:

[globals]
DEBUG=3
UI=views/

ルート.ini:

[routes]
GET /=ControllerName->methodThatRenderTheView
GET /@pagenum=ControllerName->methodThatRenderTheView

ビューをレンダリングするための基本的なコントローラー:

class ControllerName {
   public function methodThatRenderTheView() {
      $this->f3->set('view', 'template.htm');
   }
}
于 2013-06-25T12:48:14.367 に答える