0

私は約10の既存のSOの質問からの回答を試みましたが、役に立ちませんでした。URLとリダイレクトからクエリ文字列を削除する書き換えルールでSalmanAの回答を使用して、次の.htaccessファイルを作成しました。

Options +FollowSymLinks
RewriteBase /
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*) /$1? [R,L]

…次のようなURLを取得することを目標としています。

http://www.example.com/index.php?c=web

…そしてそれを次のように見せます:

http://www.example.com/web

Salman Aの回答に従った後、URLは次のようになりました。

http://www.example.com/?c=web

次に、「?c =」の部分を削除しようとしているときに何かを台無しにしました。残念ながら、何を台無しにしたのか正確にはわかりません。次に、他に何も台無しにしたくなかったため、.htaccessファイルを削除しました。 。これで、.htaccessファイルがなくても、一部のURL(特に、Salman Aの回答のテスト中にクリックした3つのURL)は次のようになります。

http://www.example.com/?c=web 

....htaccessファイルを削除したのに。3つの質問:1).htaccessファイルを削除しても変更が持続するのはなぜですか。2)私が心配する必要があることは何でもです。そして、3)すべてのURLが次のようになるように.htaccessファイルを変更するにはどうすればよいですか。

http://www.example.com/web

更新:これは私がhttp://getluky.net/2010/12/14/301-redirects-cannot-be-undon/について心配していたことです。私が301リダイレクトを失敗させ、新しい訪問者がサイトにアクセスした場合、彼らは失敗にとらわれていますか?これをキャッシュ解除する方法はありますか?

4

1 に答える 1

1

「このようなURLを取得して、このように見えるようにする」と言うとき、サーバーに対してそのように見えるようにするか、ブラウザに対してそのように見えるようにすることを意味しますか(2つの完全に異なるもの)。明確にするために、この回答の上部を参照してください。

実装した答えにより、サーバーはクエリ文字列なしでリクエストを認識します。URI/index.php?c=webが URL/ファイル マッピング パイプラインを通過した後、 mod_rewrite は churn out:/index.phpを生成し、クエリ文字列?c=webを削除し、最終的に Web サーバーがそれを取得/index.phpして提供します (sans query string)。もちろん、これらすべてが行われている間、ブラウザは、この mod_rewrite マジックが飛び交っていることを何も知らないため、表示するように指示されたものと同じ URL を表示しhttp://www.example.com/index.php?c=web続けます。 .

ブラウザーに表示される URL を変更する場合は、ブラウザーを外部から新しい URL にリダイレクトする必要があります。次のようなものを使用できます。

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /(index\.php)?\?c=([^&\ ]+)
RewriteRule ^ /%3? [L,R]

そのため、ブラウザが をリクエストするhttp://www.example.com/index.php?c=webと、このルールはクエリ文字列と照合し、ブラウザを結果にリダイレクトして、ブラウザ/webの URL アドレス バーの URL を変更します。ブラウザーはこの新しい URL を認識し、サーバーに対してこの新しい URL のまったく新しい要求を行います。にディレクトリやファイルが本当にないと思うので、元の状態に戻したいと思うでしょう/web。だからあなたはこれをします:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?c=$1 [L]

これにより、誰かが をリクエストしたときにサーバーが認識できるようになります。/index.php?c=web/web

于 2012-11-29T05:52:24.343 に答える