21

.htaccessスクリプトにリダイレクトするルールを作成しようとしています。スクリプトはさらに別の場所にリダイレクトします。URL短縮サービスの仕組みのようなものです。ただし、リダイレクトの一部でアドレスバーを変更したくありません。.htaccess(スクリプトリダイレクトで場所を変更しても問題ありません。)

私は使用しmod_rewriteています、現在これを行っています:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /
RewriteRule (.+)$ "?url=$1" [L,R=301]

私がやろうとしていることを達成するために使用できる旗や別の方法はありますか?

補遺:リダイレクトが行われている間、Firefoxではロケーションバーは変更されません。これが私がやりたいことです。エンドポイントを反映するために一度だけ変更されます。Safariはすべてのステップでそれを変更します。それを回避する方法はありますか?

4

1 に答える 1

43

Rフラグを使用している場合はmod_rewrite、外部リダイレクトが必要であることを示しているため、ブラウザは新しい要求を行うように求められ、それに応じてアドレスバーが変更されます。

フラグがないRと、リダイレクトはありませんが、ブラウザから隠されているApache内部のリクエストの書き換えがあります。したがって、アドレスバーは変更されません。ただし、明らかな理由により、外部URIへの内部リダイレクトを使用することはできません。

とにかく内部リダイレクトを使用しているように見えるので、Rフラグを削除するだけで機能するはずです。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+)$ ?url=$1 [L]
于 2009-08-20T07:30:51.163 に答える