1
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    public/    [L]
    RewriteRule    (.*) public/$1    [L]
</IfModule>

私はWindows7でWampApacheを使用しています。mod_rewrite.soはhttpd.confで有効になっています。このコードは、次のチュートリアルから直接取得されました:http: //anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/

目的は、実際のロジックが存在する./publicフォルダーに呼び出しをリダイレクトすることです。

この.htaccessファイルのディレクトリにあるindex.phpを参照しようとすると、内部サーバーエラー(http 500)が発生します。2つのrewriteruleステートメントを削除すると、機能します。

理由はわかりませんが、logsフォルダーにエラーは表示されません。エラーログは一切ありません。

ここで何が問題になっているのかについての手がかりはありますか?

4

1 に答える 1

2

(.*)、、はターゲット、と一致し/public/somethingます。/public/public/public/public/public書き換えエンジンは、リクエストURIの変更が停止するまでループし、書き換えプロセスを停止するものがないため、リクエストURIがetcに変わります。ループを防ぐために条件を追加してみてください。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$   public/     [L]
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule (.*) public/$1   [L]
</IfModule>

したがって、リクエストがすでにで始まる場合は/public、ルールを適用しないでください。

于 2013-01-13T11:59:12.677 に答える