0

これを行っている多くのサイトを見てきましたが、これを説明するガイドは見つかりませんでした。私はこの.htaccessコードを持っています

Options +FollowSymLinks  
RewriteEngine On  
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1  

site.com/user/1 を site.com/profile.php?id=1 にリダイレクトしますが、リダイレクトすると、ユーザーのアドレスバーに短縮 URL (site.com/user/1) が表示されるようになります

これどうやってするの?

4

3 に答える 3

1

リライトはサーバーの内部ロジックです。つまり、ブラウザがアドレスバーに表示される長いURLを要求し、HTTPサーバーがそれを短いURLにルーティングします。ブラウザに短いURLを表示させたい場合は、のRedirect代わりにを使用する必要がありますRewrite

リダイレクトを使用すると、サーバーがリダイレクト応答をブラウザに返し、ブラウザがもう一度ページを要求するため、ページの読み込みが遅くなることに注意してください。

于 2012-11-08T16:52:16.090 に答える
0

ルールは次のように機能します。

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を使用するように、すべてのコンテンツを変更する必要があります。

于 2012-11-09T04:11:35.610 に答える
0

これを行う方法に関する情報源はたくさんあります。これは、私がそれをグーグルで検索したときに最初に得たものです。

http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/

于 2012-11-08T16:50:57.747 に答える