0

新しいクライアントのために新しいウェブサイトを立ち上げます。古いサイトには約 50 の製品があり、残念ながら、古い製品名は新しい URL パターンと一致しません。

古い URL の例:

example.com/products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription

example.com/products.aspx?category=Foo&product=ProductNameDescription&var1=1293.123

example.com/products.aspx?category=Bar&product=ProductCategoryProdNameRandomNumbers

(古い URL は 150 文字以上になることがあります。)

新しい URL:

example.com/products/category/実際の商品名

古い製品名から新しい製品名に変わる、決まった認識可能なパターンはありません。カテゴリ用があります。

単純な mod_alias Redirects を試しましたが、代わりに RewriteRule が必要であることを理解しています。しかし、私は問題を抱えています。必要なのは、これら 50 個の URL のそれぞれに対する 1 対 1 のリダイレクトだけです。私は次のようなことができると思いました:

RewriteRule ^/products.aspx?category=Foo&product=ProductName
    /products/category/new-product-name/  [R=301,NC]

しかし、それは機能していません。これは簡単なはずですが、行き詰まっています。何か案は?

4

3 に答える 3

1

残りのリダイレクトURLには、以下のパターンを使用してください。?特殊文字などの特殊文字を エスケープし、それらの前にを追加して.スペースを使用することに注意してください\

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /products\.aspx\?category=Foo&product=SuperLongNoBreakProductNameIDDescription [NC]
RewriteRule ^ /products/category/new-product-name/  [R=301,NC]
于 2012-01-23T17:26:55.813 に答える
0

Have a look at the RewriteMap directive of mod_rewrite.

You can specify in a text file something like:

products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription /products/category/new-product-name

And in your httpd.conf

RewriteMap productmap /path/to/map/file.txt
RewriteRule ^(.*) ${productmap:$1} [R=301,NC]

Tip: If it's a permanent redirect you want, make sure you set an appropriate Cache-Control and Expires header to instruct browsers to cache the 301.

于 2012-01-23T17:23:28.720 に答える
0

あなたはこのようなことを試すことができます:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^category=Foo&product=ProductName$

RewriteRule ^products\.aspx$ /products/category/new-product-name/? [R=301,L]

ノート:

  1. ディレクトリごと(.htaccess)のコンテキストでは、ディレクトリごとのプレフィックスが削除されるため、RewriteRuleパターンを。で開始することはできません^/

  2. を使用RewriteCondして、クエリ文字列と照合する必要があります。

  3. 別の回答で述べられてRewriteMapいるように、このサイトのhttpd.conf / vhost定義にアクセスできる場合は、この状況に解決策が適している可能性があります。ただし、それがクエリ文字列でどのように機能するかはわかりません。

  4. このような場合は、これらすべてのURLをサーバー側スクリプトに書き換え、そのスクリプトを使用して各URLのHTTPリダイレクトを実行する方がよい場合があります。

于 2012-01-23T17:27:02.130 に答える