0

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]

私には意味がありません...誰か助けてもらえますか?

ありがとう

4

3 に答える 3

0

したがって、上記のエラーに基づいて、実際には index.php にリダイレクトしようとしていることがわかります。しかし、ブラウザが以下の /full/path/... にリストするファイルは、実際には私の Web サーバー上にあるため、なぜ見つからないのかわかりません。

*nix に似たシステムであると仮定すると、ファイルのアクセス許可を確認し、Web サーバーがファイルへの読み取りアクセス権を持っていることを確認することができます。

于 2013-06-25T19:15:52.373 に答える
0

DocumentRootまた、ファイル内でこのようなものを探すでパラメーターをチェックし、httpd.conf それが正しいことを確認する必要があります。それはまた、Apacheがそれを取得する場所でもあります。

DocumentRoot "/var/www/html/path/to/whatever"

SELinuxまた、オンになっている場合は無効にしますが、奇妙な問題も発生するため、実際には必要ありません。

于 2013-06-25T21:57:05.000 に答える