1

スタックオーバーフローを調べましたが、探している正確な答えが見つからないので、ここに行きます。

http://holtplantandmachinery.co.uk/cat/wheel-loadersにリダイレクトするURL http://holtplantandmachinery.co.uk/category.php?name=wheel-loadersがあります。

ただし、動的 ​​URL を入力すると、上記の静的 (フォルダー検索) URL に書き換えられ、その逆も同様に動作する必要があります。基本的に、それが呼び出されたものは何でも、静的なものに書き換える必要があります。上記とは逆の方法で動作する書き換えをセットアップし、無限ループを停止する条件を設定する必要があることはわかっていますが、何も動作しないようです。助けてください。

4

1 に答える 1

0

誰かhttp://holtplantandmachinery.co.uk/category.php?name=wheel-loadersがブラウザーの URL アドレス バーに入力すると、holtplantandmachinery.co.ukサーバーに送信される要求は次のようになります。

GET /category.php?name=wheel-loaders HTTP/1.1
Host: holtplantandmachinery
some other headers
etc 

var を使用%{THE_REQUEST}して、最初の行と照合できます。

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ category\.php\?name=([^&\ ]+)
RewriteRule ^ /cat/%2? [L,R=301]

これにより、リクエストがリダイレクトされhttp://holtplantandmachinery.co.uk/cat/wheel-loaders、その URL がブラウザの URL アドレス バーに表示されます。%{THE_REQUEST}の代わりに使用する理由%{QUERY_STRING}は、見栄えの良い URL をクエリ文字列のある URL に書き換える他のルールが表示され、%{QUERY_STRING}一致すると、ルールが適用されてリダイレクト ループが発生するためです。または、クエリ文字列と照合して、次を使用することもできます。

RewriteCond %{ENV:REDIRECT_STATUS} !200

URI が以前に書き換えられた内部リダイレクトからのものではないことを確認するため。

次に、内部書き換えルールがあります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?cat/(.*)$ /category.php?name=$1 [L]
于 2012-10-25T02:43:08.753 に答える