4

当社のウェブサーバーは次のように構成されています

/path-to-docdir     [Contains main pages]
        ./app/      [Some application not directly related to the main content]

メインページは問題なく提供されます。アプリディレクトリで、mod_rewriteを使用してすべてのページをindex.phpパブリックディレクトリ内のにリダイレクトしようとしています

だからリクエスト

/server/app/start/login/ => /server/app/public/index.php 
/server/app/start/login  => /server/app/public/index.php
/server/app/start/login?name=someone => /server/app/public/index.php?name=someone

フロントコントローラーは、文字列の最後の2つのコンポーネントに依存して、REQUEST_URIコントローラーとアクションを解釈します。

上記を行うために、ディレクトリに次の.htaccessファイルを作成しましたapp

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

ここで、サーバーが上記のURLのリダイレクトループに入っていることがわかります。に置き換え$1てみましindex.phpたが、ページが表示されますが、ページ内のスクリプトファイルへの内部参照でエラーが発生します。

いくつか検索した後、次の行を追加しました。

RewriteBase /app/

そして、それは何の違いももたらさなかったようです。また、アプリディレクトリをサーバールートディレクトリにすると、すべてが期待どおりに機能することにも注意してください。

また、デバッグログをオンにしましたが、そこから収集できるのは、サーバーが実際にリダイレクトループに入っていることだけでした。

[perdir / path-to-docdir / app /] / app / public / public / public / public / public / public / public / public / public / public / public / start /login/を使用した内部リダイレクト[内部リダイレクト]

この時点でどこから始めればよいのかよくわからないので、私をさらに動かすためのヘルプやポインタをいただければ幸いです。

編集:

このhtaccessファイルは私のために働いた-誰か他の人が解決策を探しているなら。どうやら、私は書き換え条件を逃していました

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php?$1 [L]
</IfModule>
4

1 に答える 1

4

いくつかのポイント:

パスには末尾のスラッシュは必要RewriteBaseないため、. RewriteBase /app/RewriteBase /app

RewriteRule ^(.*)$ public/$1RewriteRule ^$ public/余分にします。前者は一致http://yourserver/appし、内部的に として書き換えられるhttp://yourserver/app/publicため、後者は必要ありません。

最後に、書き換え条件を追加してみてください。

RewriteEngine On
RewriteBase /app
RewriteCond %{REQUEST_URI} !^/app/public/
RewriteRule ^(.*)$ public/$1 [L]
于 2012-06-21T21:17:33.177 に答える