[解決済み】htaccess - ブラウザのURLを変更せずにサブフォルダにリダイレクトする。
質問
私は、Webアプリの構造を持つサブフォルダを含むドメインを持っています。私は
.htaccess
サブフォルダのウェブアプリの公開フォルダを指すように、ルートドメインに設定しました。それはうまく動作しますが、私がタイプするとき
www.example.com
ブラウザのURLは
www.example.com/subfolder/public
しかし、私はそれが変更されないようにしたいと思います。
これは私の
.htaccess
:
RewriteEngine On
RewriteRule ^.*$ subfolder/public [NC,L]
EDIT
この最初の.htaccessは、サブフォルダ/publicにリダイレクトするために使用されます。
2番目の.htaccessのコードは以下の通りです。
www.example.com/subfolder/public/
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
解決方法は?
すみません、何が起こっているのか今気づきました。2番目の
.htaccess
のファイルは、コメントにあるように、サブディレクトリの中にあります。
RewriteRule ^.*$ subfolder/public [NC,L]
以来
public
はファイルシステム上の物理ディレクトリなので、内部的にそのディレクトリに書き換える場合は、末尾のスラッシュを含める必要があります。そうしないと、mod_dir はスラッシュを付加して URL を "fix"しようとします。(mod_dir は暗黙のうちに外部リダイレクトを
subfolder/public
から
subfolder/public/
.)
そこで、ルートで代わりに次のようにしてみてください。
.htaccess
ファイルを作成します。
RewriteRule .* subfolder/public/ [L]
重要なのは、末尾のスラッシュです。アンカー(
^
と
$
を含む)を
RewriteRule
パターン
をマッチングしているので、必要ありません。
すべて
. そして
NC
フラグも同じ理由で必要ありません。
いつものように、テストの前にブラウザのキャッシュがクリアされていることを確認してください。
UPDATE#1です。
上記の単一ディレクティブは
すべて
静的リソースを含む
ディレクトリ
subfolder/public/
これは、2番目の
.htaccess
ファイルを使って、 リクエストを正しくルーティングします。静的なリソースを正しく書き換えられるようにするために (HTMLではルート相対URLパスとして表現されます。
"/js/myjs.js"
) を書き換えるには、追加のディレクティブが必要です。
たとえば、すべての
.js
と
.css
ファイルを、実際の場所である
/subfolder/public/...
# Rewrite static resources
RewriteRule (.+\.(?:js|css))$ subfolder/public/$1 [L]
# Rewrite everything else to the "public" directory
RewriteRule .* subfolder/public/ [L]
UPDATE#2です。 上記をより一般的なものにするため、以下のように書き換えます。 任意の 静的なリソース(画像、PDF、.txtなど)は、書き換える前にファイルが存在するかどうかをチェックすることができます。
# Rewrite static resources
RewriteCond %{DOCUMENT_ROOT}/subfolder/public/$1 -f
RewriteRule (.+) subfolder/public/$1 [L]
# Rewrite everything else to the "public" directory
RewriteRule .* subfolder/public/ [L]
これは、もし
.css
が存在しない場合、それは
subfolder/public/
.
関連
-
[解決済み】SSL接続が確立できません。SSL証明書を修正するにはどうしたらいいですか?
-
[解決済み] Apache Proxy: 有効なプロトコルハンドラがない
-
[解決済み] WAMPでapacheのポート番号を変更する方法
-
[解決済み] java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient をインスタンス化できません。
-
[解決済み] eTagsの設定ミス[重複]について
-
[解決済み] サーバーの設定によりクライアントが拒否される
-
[解決済み] 404 Not Found 要求された URL がこのサーバーで見つかりませんでした。
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] 汎用htaccessのリダイレクトwwwから非wwwへ
-
[解決済み】Apacheで提供されるテキストファイルにgzipの代わりにdeflateを使用するのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】htaccess - ブラウザのURLを変更せずにサブフォルダにリダイレクトする。
-
[解決済み】SSL接続が確立できません。SSL証明書を修正するにはどうしたらいいですか?
-
[解決済み] htaccessファイルのRewriteOptions inheritは何をするのですか?[クローズド]
-
[解決済み] Apache Proxy: 有効なプロトコルハンドラがない
-
[解決済み] 内部DNSと外部DNSの違い?
-
[解決済み] .htaccess httpからhttpsへのリダイレクト
-
[解決済み] HTTPDとは何ですか?
-
[解決済み] Systemctlとserviceコマンドの違い
-
[解決済み】Apacheで提供されるテキストファイルにgzipの代わりにdeflateを使用するのはなぜですか?
-
[解決済み] LinuxサーバーのApacheで使用するためにPFX証明書ファイルを変換するにはどうすればよいですか?