2017-01-27 3 views
1

新しくもエキサイティングなようでもない問題にぶつかってきましたが、私は.htaccessのプログラミングのように思えるが、何百万もの問題を解決する方法があるが、正しいものを見つける/使用することはできない。HTACCESS:リンクURLをアンカーするためにURLを書き直す必要がある

  • http://stackoverflow.com/questions/21391449/how-to-use-sign-as-an-anchor-while-url-rewriting-with-htaccess-on-apache
  • を:尋ねる前に、私のソースを
    http://example.com/page#link


    http://example.com/page/link

    と内部の書き換えを行います。私はすでにきれいなURLを利用したいと思い

  • http://stackoverflow.com/questions/29165917/htaccess-rewrite-url-to-hash-anchor-on-homepage
  • http://stackoverflow.com/questions/2686075/mod-rewrite-with-anchor-link
  • http://stackoverflow.com/questions/2285193/htaccess-redirect-to-page-with-anchor-link

私は私の特定の問題への解決策を見つけるために、すべての答えとコメントを介して読みました。これまでに何も働いていません。私は仕事をするための簡単なテストをすることさえできず、書き換えがまったく動かないように思えます。ウェブホストはNetfirmsです:http://pastebin.com/xJWHq70f

あなたがここに私の現在の.htaccessファイルを見つけることができます。私はNetfirmsのデフォルトの.htaccess愚か者を無効にしました。

要約すると、私はすでにクリーンなURLを取って、さらにページ/テストからページ#テストに解析して書き直そうとしています。私の.htaccessファイルの最後の行は、作成理論的には

のRewriteRule ^について、私/(.*)$ /について、私の#$ 1 [NE、R](動作しませんでした)

を持っていませんでしたhttp://example.com/about-me/who-am-iのように見えるアドレスバーを維持しながらabout-me/who-am-iにページ上のリンクはhttp://example.com/about-me#who-am-iに私を取る必要があります。現時点では、about-me.phpページのためにこの書き換えを有効にしたい特定のページが1つあります。

おかげで、
ダグ

PS
申し訳ありませんので、私は通常

UPDATE 2016年1月27日

さらに検討し、さらなる調査のすべてのリンクを投稿することができ10+担当されていないため私がしたいことが単にできないことを証明します。問題ない。私はギヤを切り替えて、ナビゲーションシステムを動作させる方法を変えました。

代わりにabout-meページをベースとして必要な余分なページを作成します。ページ上に多くのテキストがあるので、セクションを読むためにそれをより良いものに分割することをお勧めします。

ウィリアムが提示したアイデアを使用して、私はすぐに解決策をまとめることができました。 .php拡張子を削除して.php拡張子を非拡張子ファイルにリダイレクトするオリジナルの.htaccessコードが壊れて、500個のエラーが発生しました。一定!

次のコードを使用する:私は任意のURLを持つことができます

RewriteRule ^about-me/(.*) /$1 [L,NC] 

程度を-ME /統計または約-私/testing123と限り実際のstats.phpまたはtesting123.phpルートに存在すると、内部的に適切にリダイレクトされます。ファイルが存在しない場合は404'ingしながらクリーンなURLを維持します。

+1

私が知っている限り、アンカータグはクライアント側で処理されてページセクションにジャンプすることができます。内部リライトを行う場合、クライアントはそのことを認識しません。 – apokryfos

答えて

0

[OK]を重要なことは、だから、これが動作する外部の書き換え、あなたが内部の書き換えを行うことを確認する

ではありません。

RewriteRule ^page/(.*) /page#$1 [L] 

あなたは[R = 301]を追加していないことを確認してくださいフラグ(またはRのその他の値)を指定するか、クライアントに応答を提供します。 RFC 3986およびRFC 1738によると、フラグメント識別子は、URIを逆参照するときにクライアントによって削除されます。

EDIT

Apacheがフラグメントを含めるようにURLを書き換えますが、PHPはおそらくBARFます。 RFC 1738あたりとして:

文字「#」が安全でないと、それは続くかもしれない フラグメント/アンカー識別子からURLを区切るために、ワールド・ワイド・ウェブおよび他のシステムで使用される あるので、常にエンコードする必要がありますそれ...すべて安全でないすべて 文字は常にURL内でエンコードされなければなりません...たとえば、 文字 "#"は、通常、フラグメントまたはアンカー識別子である を扱わないシステムでもURL内でエンコードする必要があります。if URL は、それらを使用する別のシステムにコピーされますが、URLエンコーディングを変更するには にはなりません。

PHPが安全に解析するようにするには、フラグメントをエスケープする必要があります。

+0

ヘイウィリアム、私はちょうどそのスニペットを試み、まだ500のエラーを取得しています。私は他のすべての.htaccessコーディングを削除しようとしただけで、その1つの書き換えラインを保っていました。 –

+0

PHPサーバーから500が返ってこないか確かめてください。フラグメント識別子は、技術的にそれをURLとして修飾するためにエスケープする必要があるため、エラーをスローする可能性があります。どのようにPHPでURLを手渡しますか? –

+0

クイックアップデート:私はあなたのコードを動作させるようにしました。これ以上のエラーはありません。完全な.htaccessコードを追加して、クリーンURLのセクションをコメントアウトしました。だから今私が使用する場合:
RewriteRule^about-me.php /(.*)/about-me.php#$1 [L] about-me.phpページ(nice)に私を連れて行き、例としてURLを表示します.com/about-me.php/test(非常に良い)しかし、ブラウザをアンカーにジャンプさせる代わりに、ページの上部に座っているだけです。私のきれいなURLコードで何かが間違っています... –

関連する問題