.htaccessで下記のようにして、

ページ内リンクに飛ばしたいのですが「#」が使えないようです。

どうすれば考えていることができるでしょうか。
よろしくお願いします。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?test/ /hoge/#test [L]

回答の条件
  • 1人2回まで
  • 登録:2009/11/30 12:01:47
  • 終了:2009/12/07 12:05:02

回答(1件)

id:kmdsbng No.1

kmdsbng回答回数5ベストアンサー獲得回数22009/11/30 13:23:17

ポイント60pt

ページ内リンクはブラウザが処理を行います。たとえばブラウザが

http://example.net/hoge/#test

というURLにアクセスすると、サーバは/hoge/というコンテンツを返し、ブラウザが <a name="test"> という要素まで画面をスクロールします。

なので、mod_rewriteでこれを実現するためには、ブラウザに302ステータスを返して、ページ内リンクを含んだURLに再度アクセスさせる必要があります。

mod_rewriteで、HTTPステータス 301 を返すサンプルが以下のページにありました。

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html

この手法で、恐らくブラウザにページ内リンクを含んだURLにアクセスさせることができるはずです。(ただし未検証です)

ただ、この手法は外部リダイレクションを用いているため、リダイレクト後にブラウザに表示されるURLは、元々ブラウザがアクセスしたURLではなく、リダイレクト後のものになる、という副作用があります。

ご参考まで。

id:web2009

ありがとうございました。

2009/11/30 16:34:57
  • id:b-wind
    RewriteRule ^/?test/ /hoge/#test [R,L]
    にすればとりあえずは動くが、URL 自体を /test/ のままにしたいということなら不可能だな。
    # 以降はあくまでブラウザが解釈するだけでサーバーには送られないから対応のし様が無い。
  • id:web2009
    b-wind さん

    ありがとうございます。
    R, を足せばよいのですね。
    これでOKです!!

    助かりました。

    お願いなのですが、同じ内容で回答していただけませんでしょうか。

    これが求めいていた回答なので、
    回答していただけない場合はこの質問自体をキャンセルし、
    b-windさんにポイントを送ることとなります。

    ですので、どうかよろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません