質問

新しいクライアント向けに新しいウェブサイトを立ち上げる。古いサイトには約 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 リダイレクトを試しましたが、代わりに RewriteRule が必要であることを理解しています。しかし、問題があります。必要なのは、これら 50 の URL ごとに 1 対 1 のリダイレクトだけです。次のようなことができると思いました:

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

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

役に立ちましたか?

解決

残りのリダイレクト 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]

他のヒント

を見てください。 RewriteMap の指令 mod_rewrite.

テキスト ファイルでは次のように指定できます。

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

そしてあなたの中で httpd.conf

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

ヒント:永続的なリダイレクトが必要な場合は、必ず適切なリダイレクトを設定してください。 Cache-Control そして Expires ヘッダーを使用してブラウザに 301 をキャッシュするように指示します。

次のようなことを試すことができます。

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 リダイレクトを実行する方が良い解決策となる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top