-1

リダイレクトしようとしています

http://www.domain.com

http://www.domain.com/subdir/

「/subdir」がユーザーから隠されています。少なくとも彼の URL バーでは。

私の初歩的な知識に基づいて私が考え出したこと:

RewriteEngine on
RewriteRule ^(/(.*))?$ http://www.domain.com/subdir/$1 [P,L]

リダイレクトに関しては機能していますが、クローキングではありません。任意のヒント?

4

2 に答える 2

0

まず、公式の mod_rewrite ドキュメントによると、置換部分が絶対 URL である場合、外部リダイレクトが発生する可能性があります (ユーザーのブラウザーで URL が変更される原因となります。ただし、mod_rewrite は、その絶対 URL が要求と一致するかどうかを確認し、その部分を削除する必要があります)。アウトしましたが、バージョン 2.2 を確認したところ、リダイレクトが発生しました)。

したがって、1 つのアイデアは、次のような相対 URL を使用することです。/subdir/$1

これは良さそうに見えますが、まったく機能しないため、問題は解決しません。

代わりに、次のようなものを常に内部的に追加することをお勧めしsubdir/ます。

RewriteRule ^subdir/.* - [PT]
RewriteRule (.*) /subdir/$1

簡単な説明:

  • 最初のスラッシュ/はパターンに含まれていないため、次のパターンになります。
    • http://www.domain.com/-->''
    • http://www.domain.com/dir1/file1.html-->dir1/file1.html
  • 最初のルールがまだ変更されている場合、繰り返し/再帰的に追加するのを防ぐにsubdir/は [PT] を通過します
  • 2 番目のルールは、subdir/入力されたものの前に

この 2 つのルールは常にsubdir/内部的に URL に追加されることに注意してください (ユーザーには表示されません)。リクエストのその部分をルートディレクトリに追加するだけの場合は、もちろんルールを変更する必要があります-質問のユースケースを明確にするためのヘルプを得るために。

mod_rewrite をより頻繁に使用する予定がある場合は、お使いの Apache サーバー バージョン (あなたの場合は 2.0 または 2.2 だと思います)のmod_rewrite ドキュメントを読むことを強くお勧めします。

于 2013-05-08T21:30:38.033 に答える
0

mod_rewrite と .htaccess を有効にしてからhttpd.conf、このコードをディレクトリの.htaccess下に配置します。DOCUMENT_ROOT

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule (?!^subdir/)^(.*)$ /subdir/$1 [L,NC]
于 2013-05-08T21:38:26.910 に答える