7

Web ホスト (Dreamhost) にRecess PHP フレームワークをインストールしようとしています。次の .htaccess が含まれます。

Options FollowSymLinks
RewriteEngine On
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ bootstrap.php [QSA,L]

これは私のマシン (Windows 7 の XAMPP 1.7.7) では正常に動作しますが、Web ホストの一部のファイルで 403 Forbidden エラーが発生します。すべてのディレクトリ権限は 755 に設定され、すべてのファイル権限は 644 に設定されています。PHP は、ファイルを所有する同じユーザーの下で実行されます。

次の URL では 403 が返されます。

  • http://test.dd.moofz.com/
  • http://test.dd.moofz.com/recess-conf.php
  • http://test.dd.moofz.com/index.php
  • http://test.dd.moofz.com/bootstrap.php
  • http://test.dd.moofz.com/MIT-LICENSE

次の URL はありません。

  • http://test.dd.moofz.com/.gitignore
  • http://test.dd.moofz.com/httpd_logo_wide.gif
  • http://test.dd.moofz.com/README.textile
  • http://test.dd.moofz.com/the-book-of-recess.pdf

これが起こる原因は何ですか?

4

2 に答える 2

9

結局のところ、次の行を変更する必要がありました。

Options FollowSymLinks

に:

Options +FollowSymLinks
于 2012-04-10T21:55:38.213 に答える
2

そのフレームワークに慣れていませんが、他の場所にいくつかの行があるか、微調整が必​​要なようです。

確かに私は mod 書き換えの専門家ではありませんが、最初の行ですべてのリクエストが request_file.html に送信され、2 行目でファイルが存在しない場合は 3 行目で boostrap.php が呼び出されます。

問題はboostrap.phpにある可能性があります。そのスクリプトで何が起こるか、リクエストがどのように処理されるかを確認してください。そのステップでは、デバッガーが役立つ場合があります。これでうまくいくかもしれませんが、そのままでは最適ではないかもしれません。たとえば、通常、ルーティング スクリプトに .gif、.jpg .css を送信しないようにするルールセットがあると思います。このようなもの:

RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js)

これにより、これらのタイプのファイルに対するリクエストを php で処理するオーバーヘッドが回避されます。堅牢なアプリケーションの本番環境で使用するには、さらに多くの考慮事項があります。ルールを微調整して、すべてが適切にルーティングされ、問題が発生しないようにするだけです。

于 2012-04-09T03:33:06.420 に答える