Apache Rewrite Engine はすべてのリクエストを index.php にリダイレクトします

Apache Rewrite Engine はすべてのリクエストを index.php にリダイレクトします

Apache Web サーバー上に PHP Web アプリケーションがあります。

サーバー上の Web アプリケーションへのパスは次のとおりです。/var/www/html/intern/organisation/example_app

Web アプリケーションの URL は次のとおりです。
https://www.example.de/org1/intern/example_app/

https://www.example.de/org1/intern/example_app/view1/すべてのリクエストがリダイレクトされるようにしたい

https://www.example.de/org1/intern/example_app/index.php

私のローカル XAMPP サーバーでは、この目的に適した次の .htaccess ファイルを使用しています。

RewriteEngine On
RewriteBase /example_app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

しかし、そのファイルがサーバー上でどのようになっているのか全くわかりません。サーバー上では httpd.conf も使用しています。そのファイルが.htaccess以下のファイルに干渉するかどうかが気になります。/var/www/html/intern/organisation/example_app/

サーバー上で書き換えを構成する方法をご存知の方はいらっしゃいますか?

答え1

.htaccessサブディレクトリ内のファイルは次/org1/intern/example_app/のようになります。

DirectoryIndex index.php

RewriteEngine On

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

同じ.htaccessファイルをサブディレクトリに保存すれば、ローカルでもライブ サーバーでも使用できますexample_app/

ファイルが、書き換え先のファイル.htaccessと同じディレクトリにある場合は、ディレクティブは必要ありません。index.phpRewriteBase

ディレクティブはサーバー設定でDirectoryIndexすでに に設定されている可能性が高いindex.phpため、ここでは必要ありませんが、完全性を保つために含めておく必要があります。これは、アプリケーション ディレクトリ自体が要求された場合 (つまりhttps://www.example.de/org1/intern/example_app/) に必要です。

これは「内部リダイレクト」、またはより一般的には「書き換え」と呼ばれるものであることに注意してください。単に「リダイレクト」と言うと、それは「外部 (HTTP) リダイレクト」を意味しますが、これはまったく別のものです。


.htaccess fileそのファイルが、以下のに干渉するかどうか疑問に思います。/var/www/html/intern/organisation/example_app/

複数の.htaccessファイル(およびサーバー設定)が競合する可能性があります。ただし、子設定(同じコンテクストつまり、ディレクトリ) は、親設定の mod_rewrite ディレクティブを完全に上書きします (デフォルト)。


余談:(あるいはそうではないかもしれない)

サーバー上の Web アプリケーションへのパスは次のとおりです。/var/www/html/intern/organisation/example_app

Web アプリケーションの URL は次のとおりです。https://www.example.de/org1/intern/example_app/

ただし、少し混乱しますが、ファイル パスと URL パスが一致していないようです。Aliasサーバー構成で追加の書き換えまたは構成を行っていますか、それともexample_appファイル パスがexample_appURL パスとは異なるディレクトリになっていますか。

答え2

詳細な回答をありがとうございました。書き換えルールは問題ではありませんでした。

問題は単純でした。httpd.conf で AllowOveride を有効にする必要があったため、.htaccess 全体が機能しませんでした。

関連情報