0

過去に書き換えようとしている 2 つの URL があります... 4 ~ 5 時間 (今は頭痛の種)。

書き直そうとしています

/arts/tag/?tag=keyword 

/search/art?keywords=keyword

他の質問を見て、私はこのように書き直しました

RewriteRule /arts/tag/?tag=([^&]+) search/art?keywords=$1 [L,R=301,NC] 

RewriteRule ^arts/tag/?tag=$ /search/art\?keywords=%1? [L,R=301,NC]

バックスラッシュを付けて試してみましたが、運がありませんでした。

また試した

RewriteCond  %{QUERY_STRING} /arts/tag/?tag=([^&]+) [NC]
RewriteRule .* /search/art\?keywords=%1? [L,R=301,NC]

2枚目も似たようなもので、

/arts/category?id=1&sortby=views&featured=1

/art/moved?id=1&rearrange=view

get 変数名を変更する理由は、目的のチュートリアルが見つからないため、自分の学習目的のためです。また、カテゴリが変更されたため、カテゴリを移動に変更しました。ID # を内部的にリダイレクトする必要があります。

RewriteCond %{QUERY_STRING} id=([^&]+) [NC] // I need the path in there though, not just query string, since I'll be redirecting /blogs/category and /art/category to different places.
RewriteRule .* /art/moved/id=%1? [L,R=301,NC]

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

元のURLのクエリに、置換URLのクエリとの共通点がないと仮定すると、クエリの最初keyのクエリを条件として使用し、受信URLを識別することで、必要な処理が実行される可能性があります。

RewriteEngine On
RewriteBase /
# First case
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING}  \btag\b
RewriteRule .* http://example.com/search/art?keywords=keyword?  [L]

これをマッピングします: http://example.com/arts/tag/?tag=keyword

これに: http://example.com/search/art?keywords=keyword

# Second case
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING}  \bid\b
RewriteRule .* http://example.com/art/moved?id=1&rearrange=view?  [L]

これをマッピングします: http://example.com/arts/category?id=1&sortby=views&featured=1

これに: http://example.com/art/moved?id=1&rearrange=view

両方ともサイレントにマッピングされます。新しいURLをブラウザのアドレスバーに表示する場合は、次のようにフラグを変更します[R,L]。に置き換えRR=301、永続的なリダイレクトを行います。

于 2012-12-30T22:52:51.050 に答える