3

/home/lukasz/websites 内のすべてのディレクトリの動的 vhost ファイルを作成しました

<VirtualHost *:80>
        ServerName vm01.dev
        ServerAlias *.vm01.dev

        SetEnv APPLICATION_ENV "lukasz"

        VirtualDocumentRoot /home/lukasz/websites/%1/public
        <directory /home/lukasz/websites/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
        </directory>
</VirtualHost>

mod_rewrite の非常に単純なルールが機能するまでは、うまく機能します。次のコードを .htacesss に追加すると

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Apache サーバーは応答できなくなります。無限ループに入り、10 回のリダイレクト後に実行から抜け出します。この問題は、私が使用している VirtualDocumentRoot と密接に関連しています。構成を動的に保ち、約 htaccess で壊れないように構成を変更するにはどうすればよいですか?

4

1 に答える 1

0

リクエストされたリソースが存在しない場合、index.phpをデフォルトのページにしたいのでしょう、とあなたは言いませんでした。

この場合、ErrorDocumentエントリをvirtualHostに追加するだけで十分です。

ErrorDocument 404 /index.php

mod_rewrite を使用する場合は、ルールを .htaccess ファイルよりも Virtualhost 定義に配置する方がはるかに効率的です。httpd.confは起動時に 1 回読み込まれ、すべてのルールがコンパイルされます。.htaccess ファイルが読み込まれ、すべてのルールがリクエストごとに解析されるのとは対照的です。とにかく、次はループを停止する必要があります。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

/index.phpがあるとします。

参考までに: Apache mod_rewriteのドキュメントは、上記のルールが何をするものか不明な場合、またはもう少し抽象的な内容が必要な場合は、次の投稿を検討する価値があります。

于 2012-11-14T03:49:49.570 に答える