質問: .htaccessで下記のようにして、 ページ内リンクに飛ばしたいのですが「#」が使えないようです。 どうすれば考えていることができるでしょうか。 よろしくお願いします。 RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?test/ /hoge/#test [L]
回答: ページ内リンクはブラウザが処理を行います。たとえばブラウザが というURLにアクセスすると、サーバは/hoge/というコンテンツを返し、ブラウザが という要素まで画面をスクロールします。 なので、mod_rewriteでこれを実現するためには、ブラウザに302ステータスを返して、ページ内リンクを含んだURLに再度アクセスさせる必要があります。 mod_rewriteで、HTTPステータス 301 を返すサンプルが以下のページにありました。 この手法で、恐らくブラウザにページ内リンクを含んだURLにアクセスさせることができるはずです。(ただし未検証です) ただ、この手法は外部リダイレクションを用いているため、リダイレクト後にブラウザに表示されるURLは、元々ブラウザがアクセスしたURLではなく、リダイレクト後のものになる、という副作用があります。 ご参考まで。