0

次のようなリンクがあります。

www.domain.com/page.php?id=1#info

これを取得するには、.php を非表示にしたいだけです。

www.domain.com/page?id=1#info

このため、次の .htaccess スクリプトを見つけました。

RewriteEngine on

# to make `/path/index.php` to /path/
RewriteCond %{THE_REQUEST} ^GET\s(.*/)index\.php [NC]
RewriteRule . %1 [NE,R=301,L]

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC]

RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule . %{REQUEST_URI}.php [L]

これはまさに仕事をし、出力するサファリを除くすべてのブラウザで動作します:

www.domain.com/page?id=1

#info はなくなりました。

ブラウザーはどのように .htaccess を異なるものとして解釈するのでしょうか? 誰かが正しい .htaccess ファイルを作成するのを手伝ってくれますか?

4

1 に答える 1

2

Safari は、すべてのブラウザーがすべき方法で動作します。

フラグメントはドキュメントの MIME タイプに依存し、クライアント(Web ブラウザ) によって評価されます。クライアントは、ドキュメントを取得するときに URI フラグメントをサーバーに送信することは想定されておらず、ローカル アプリケーション (以下を参照) の助けがなければ、フラグメントは HTTP リダイレクトに参加しません。

ウィキペディア: フラグメント識別子

平易な英語で: URL の の後の部分は#、ブラウザによってサーバーに送信されるべきではありません。ブラウザはこれをローカルで処理する必要があります。これは、リダイレクト (書き換えルール) を適用すると、フラグメントが失われる可能性があることを意味します。

于 2012-05-23T22:57:23.080 に答える