サイトのURLからサブフォルダーを削除しようとしています。
以下は私のフォルダの構造です。 .htaccess
ファイルをどこに配置し、何を書き込むべきかわかりません。
私は次のことを書きました:
RewriteEngine On
RewriteRule ^$ subdir1/subdir2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ subdir1/$1
.htaccess
ファイルがmysiterootフォルダに配置されているインデックスでのみ機能するようです。
page1.php
の代わりにwww.mysiteroot.com/page1
を表示するようにwww.mysiteroot.com/subdir1/subdir2/page1.php
をリクエストするにはどうすればよいですか?
ソリューションを投稿する前に、このほとんどをすでに書いていました。とにかく、読者が役立つと思うより一般的なソリューションとして投稿します。
page1.php
の代わりにwww.example.com/page1
を表示するようにwww.example.com/subdir1/subdir2/page1.php
をリクエストするにはどうすればよいですか?
これを行うには、.htaccess
ではなく、アプリケーションのURLを物理的に変更します。アプリケーションでURLが変更されると、要求はwww.example.com/page1
、つまりユーザーに表示される可視のURL(page.php
ではなく)になります。次に、.htaccess
でmod_rewriteを使用して、内部的に書き換え表示されるURLを実際の/隠しファイルシステムパス/subdir1/subdir2/page1.php
に戻します。 (しかし、あなたのコードは正しいことをしているので、あなたはすでにこれを知っていると思います。)
ファイル階層図では、subdir2
と同じレベルでsubdir1
を表示しているように見えますか?ただし、コードとURL構造は、subdir2
がsubdir1
のサブディレクトリであることを示唆しています。後で仮定します。
基本的に、次の2つのことを行う必要があります。
すべての要求を/subdir1/subdir2/
に書き換えます(ファイルまたはディレクトリに直接マップする要求を除く)。
.php
ファイル拡張子を、まだファイル拡張子がないリクエストに追加します。
ドキュメントルートの.htaccess
ファイルで次のようなものを試してください。 mysiteroot/.htaccess
。
RewriteEngine On
# If the request has already been rewritten
# Or maps to an existing file then stop here.
# (Can't test for dir here since would not rewrite the doc root)
RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# No file extension on request then append .php and rewrite to subdir
RewriteCond %{REQUEST_URI} /(.+)
RewriteRule !\.[a-z0-4]{2,4}$ /subdir1/subdir2/%1.php [NC,L]
# All remaining requests simply get rewritten to the subdir
RewriteRule (.*) /subdir1/subdir2/$1 [L]
/path/to/file
(ファイルに直接マッピングされない)に対する要求は、内部的に書き換えられます to /subdir1/subdir2/path/to/file.php
になります。
最初のRewriteCond
ディレクティブは、サブディレクトリにすでに書き換えられたリクエストを書き換えないことを保証し、書き換えループを防ぎます。
やりたいことに合ったソリューションを見つけました。オンラインの人々は回答を生成しますが、問題は、ページを参照するために拡張子のない同じページ名を使用するつもりがないことです。これは、メインページのリストを含むファイルを保持することを意味します。
ソリューションの詳細は次のとおりです。-ルートフォルダにhtaccessファイルを配置します-絶対参照を使用してサブディレクトリのページを参照します
htaccessファイルの内容:
RewriteEngine On
Options -Indexes #prevents access to folders
RewriteRule ^page1?$ ./subdir2/page1.php
RewriteRule ^page2?$ ./subdir2/page2.php
これにより、htaccess内のすべてのページは、ルートディレクトリにあるかのように機能します。したがって、メインページではなく、サブフォルダーにあるページを呼び出す場合は、その時点でルートフォルダーから参照してください。
シンプルなソリューションが最適なタイミングで機能する