3 台の別々のコンピューターに 3 つの Web サーバーがあります。すべての URL リクエストを index.php (フロント コントローラー パターン) に書き換える php アプリケーションをインストールしようとしています。次の .htaccess は、3 つの Web サーバーのうち 2 つで機能します。
RewriteEngine On
# Redirect everything to the Front Controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(css|images|files)/ index.php [NC,L]
そのため、 にアクセスするhttp://example.com/hithere
と index.php が呼び出され、最初に要求された URL ( hithere
) を解析して、送信先のコントローラーを特定できます。
しかし、なんらかの理由で、上記の .htaccess ファイルは 3 番目の Web サーバーでは機能しません。代わりに、にアクセスするhttp://example.com/hithere
と、ブラウザに次のような 404 not found エラーが表示されます。
The requested URL /full/path/to/application/index.php was not found on this server.
したがって、上記のエラーに基づいて、実際には index.php にリダイレクトしようとしていることがわかります。しかし、ブラウザが以下にリストするファイルは、/full/path/...
実際には私の Web サーバー上にあるため、なぜ見つからないのかわかりません。誰かが私を助けて、私が間違っていることを教えてもらえますか?
編集: httpd.conf 内の何かが競合している可能性があるかどうかはわかりませんが、このアプリケーションがあるディレクトリの httpd.conf にある設定は次のとおりです。
Alias /myapp /full/path/to/my/app
<Directory /full/path/to/my/app>
Order allow,deny
AllowOverride All
Allow from all
</Directory>
編集 2: Apache ログで奇妙なことに気付きました。Apache は、トラフィックをリダイレクトしようとしている index.php を DocumentRoot に追加しているようです。
File does not exist: /document/root/full/path/to/my/app/index.php
それがいつになるべきか:
/full/path/to/my/app/index.php
したがって、基本的に、htaccess にドキュメント ルートを無視するように指示する必要があります。.htaccess ファイルでこれを指定して、これを試しました。
RewriteBase /full/path/to/my/app/
しかし、それはまだindex.phpのドキュメントルートを検索しています:/ DocumentRootをリセットする方法、またはindex.phpに書き換えるときにそれを無視するようにhtaccessに指示する方法はありますか? RewriteRule で絶対パスを使用しても、ドキュメント ルートに追加されます。
RewriteEngine On
# Redirect everything to the Front Controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(css|images|files)/ /full/path/to/my/app/index.php [NC,L]
私には意味がありません...誰か助けてもらえますか?
ありがとう