ルールは次のように機能します。
RewriteRule <pattern_A> <target_B>
これは常にから<pattern_A>
まで 機能しますが<target_B>
、その逆はありません。このルールによる2つの要求の「リンク」はありません。この回答の上部は、「URLが別のURLに変更された」ときに発生する2つの異なることを扱っています。
あなたが持っているルールは、クエリ文字列のないURLを取り、それをクエリ文字列のあるphpファイルに内部的に書き換えます。ブラウザはこれが発生することを認識しません。これは「舞台裏」です。アドレスバーにクエリ文字列を含まないURLを表示する場合は、最初に別のURLに移動し、その「別の」URLでブラウザを外部にリダイレクトする必要があります。したがって、すでに持っているルールの下で:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profile\.php\?id=([^&\ ]+)
RewriteRule ^ /users/%1? [L,R=301]
これは、リクエストURI(URL処理パイプラインと書き換えエンジンに沿って変更される)ではなく、リクエスト文字列と一致し、IDを抽出し、フラグを使用してクエリ文字列なしでブラウザを新しいURLにリダイレクトします。R=301
非常に面倒で非効率的な方法でブラウザをリダイレクトし、内部で元のURLに書き換えるのではなく、見栄えのよいURLを使用するように、すべてのコンテンツを変更する必要があります。