システムレベルのリンクを使用せずにDocumentRoot
のサブディレクトリからindex.htmlファイルを提供するにはどうすればよいですか?
例えば:
dirA
とするhttp://test.local/
とするdirA/dirB/
に常駐させますhttp://test.local/
(ベースURL)がindex.htmlファイルを解決するようにします(ディレクトリのリストは提供しません)。私はこれを行うためにmodの書き換えを使用しようとしましたが、正規表現とmodの書き換えになじみがありません。動作するルールはRewriteRule . /html/index.html [L]
ですが、URLはtest.local/html /(index.htmlファイルが存在する場所)に解決されるため、これは受け入れられません。
必要なのは、ドキュメントルートに対応する正確なURLであり、システムを使用せずに、ドキュメントルートの代わりにドキュメントルート(つまり「html」)のサブディレクトリでindex.htmlファイルを見つけるレベルのシンボリックリンク(つまり、完全にApache内から)。
@Stephenが提案するmod_rewriteソリューションが必要な場合もありますが、DirectoryIndex
(要件に応じて)も考慮する必要があります。
DirectoryIndex
ドキュメントは、ディレクトリをリクエストしたときにどのファイルを提供するかをApacheに指示します。多くの場合、これは要求されているディレクトリのindex.html
にデフォルト設定されますが、任意のファイルをどこでも指定できます。例えば:
DirectoryIndex /html/index.html
これは、ディレクトリ(たとえば、ドキュメントルート)を要求するときにルート相対/html/index.html
ファイルを提供するようにApacheに指示します。要求されたディレクトリにindex.html
が存在する場合は提供し、それ以外の場合は/html/index.html
を提供する場合は、両方をテストする順序で含めることができます。たとえば、
DirectoryIndex index.html /html/index.html
参照:
https://httpd.Apache.org/docs/2.4/mod/mod_dir.html#directoryindex
書き換えルールは近いです。もう少し制限する必要があります。
RewriteRule ^\/?$ /html/index.html [L]
\/
は、ホームページの目的のURLであるリテラルスラッシュと一致します。バックスラッシュでエスケープされます。
疑問符はスラッシュをオプションにし、ルールを。htaccessまたはApache 。confファイル内で使用できるようにします。
^
はURLパスの始まりと一致し、$
はURLパスの終わりと一致します。これらを配置すると、ルールがホームページのみに制限されます。
すべての.html
ファイルをそのサブディレクトリに書き換えたい場合は、ルールを追加することもできます。
RewriteCond %{REQUEST_URI} !^/html/
RewriteRule ^\/?(.*\.html)$ /html/$1 [L]