1

/publicディレクトリと次のファイルに静的ファイルがあるSlimフレームワークに基づくPHPアプリケーションがあり.htaccesます。

# URL routing
Options -MultiViews
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

/index.php にアクセスしようとすると Apache が直接返すのですが、これを渡して index.php に書き換えてほしい (404 not found を返します)。どうすればいいですか?

削除しようとするとRewriteCond %{REQUEST_FILENAME} !-f

# URL routing
Options -MultiViews
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]

RewriteRule ^ index.php [QSA,L]

Apache から「内部サーバー エラー」が返されます。どうすればそれを成し遂げることができますか?

Upd: 私のプロジェクト構造

www/
├── app/
├── cache/
├── public/
│   ├── css/
│   ├── img/
│   └── js/
├── vendor/
├── views/
└── index.php
4

2 に答える 2

1

あなたの RewriteRules は混乱しています。

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]

あなたがApacheに伝えているのは、「DOCUMENT_ROOT/public%{REQUEST_URI}がファイルの場合」です。ただし、セットアップでは、DOCUMENT_ROOT は既に public/. これがあなたの混乱の元です。

代わりにこれを考慮してください:

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.+)$ /public/$1 [L]

 RewriteRule ^$ ./index.php [QSA,L]

DOCUMENT_ROOT を使用して実行しようとしているファイル名の変換は、Apache によって既に行われています。

于 2013-05-26T15:17:00.687 に答える
-1

最善の方法は、.HTACCESS ファイルを削除するか、サーバー ROOT で編集することです。

DirectoryIndex public_html www html

于 2013-05-26T15:15:52.790 に答える