17

次の URL を取得したい状況があります。

/1/ジョン

Apache の htaccess ファイルを使用してリダイレクトし、

/page.php?id=1&name=ジョン#ジョン

john という名前の html アンカーに移動するようにします。

特殊文字をエスケープすることや、[NE] フラグを追加してリダイレクトが # 記号を無視するようにすることについての多くの参照を見つけましたが、これらは機能しません。たとえば、[NE,R] を追加すると、URL が元の URL としてブラウザーのアドレスに表示されることを意味します: http://example.com/page.php?id=1&name=john#john .

4

4 に答える 4

26

これは、[NE] フラグ(noescape) を使用して可能です。

デフォルトでは、たとえば & や ? などの特殊文字は、同等の 16 進数に変換されます。[NE] フラグを使用すると、それを防ぐことができます。

詳細http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne

于 2010-11-24T13:17:43.773 に答える
4

実際には、これらのいずれかを実行できますが、両方を実行することはできません。

[NE]フラグを使用して、「#」文字をエスケープしないようにApacheに指示できますが、リダイレクトを機能させるには、単に相対ページではなく、リダイレクト先の絶対URLを指定する必要があります。Apacheは、ウィンドウをアンカーまでスクロールすることはできません。ただし、絶対URLにリダイレクトすると、ブラウザはそうなります。

于 2013-01-10T21:44:27.653 に答える
2

やりたいことは、URL の書き換え、具体的には URL の美化で実現できます。

このよく説明されたブログ投稿をすぐに見つけました。URLs-part の書き換えの学習に役立つことを願っています。

については#(私が何を話しているかお分かりいただけると思いますが)、書き換えられた URL に同じ変数を 2 回渡しても問題はないと思います。Like: (最初の行の最後の部分に注目してください)

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$  /$1/$2/#$2 [R]
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&subpage=$2

#ただし、 - 部分をエスケープする必要があり、次の方法で実行できるようです

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$  /$1/$2/\%23$2 [R,NE]

ところで、URL の書き換えはそれほど難しくありません(複雑になる可能性があり、私は専門家ではありません)、途中で Google が大いに役立ちます。

于 2010-05-20T10:02:34.747 に答える
0

アンカーへの内部リダイレクトはできません。(ちょっと考えてみてください: Apache はどのようにしてアンカーまでスクロールダウンするでしょうか?) リンクは を指している必要があり/1/john#johnます。アンカーはリクエスト URI の一部ではありません。

于 2010-05-20T09:53:53.843 に答える