当社のウェブサーバーは次のように構成されています
/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>