2

404 にリダイレクトされようとしている URL を処理する PHP スクリプトがあります。

example.com/oldnonexistentcategory-actualproduct-product_reviews-actualproduct.htm のような URLをexample.com/product_reviews-actualproduct.htmに書き換えるにはどうすればよいですか?

別の言い方をすれば、「example.com/」と「product_reviews」の間のすべてを削除するにはどうすればよいですか?

URL の唯一の一貫した部分は、example.com と product_reviews が含まれていることです。私は preg_match/preg_replace の使用を検討しましたが、正規表現構文については非常に初心者です。

4

1 に答える 1

0

すべての URL がそのように基づいている場合は、preg_match を使用せずに、より高速で使いやすい爆発を使用してください。

<?php

// ...

$explodedUrl = explode('-', 'oldnonexistentcategory-actualproduct-product_reviews-actualproduct.htm');

$redirectUrl = $explodedUrl[2].'-'.$explodedUrl[3];

echo $redirectUrl; // product_reviews-actualproduct.htm

ただし、注意してください。これは、次の 2 つのことを想定しています。

  1. URL は常に「-」:「」で区切られた 4 つの部分に基づいていますstring-string-string-string.htm
  2. スラッグ " string" の一部に "-" 文字を含めることはできません (そうしないと、スクリプトが正しく動作しません)。

そのため、そのようなものではなく、一部に「-」文字を含むスラッグがないことを確認してください。old-non-existent-category-actual-product-product-reviews-actual-product.htm

URL が 4 つの部分より多い場合も少ない場合もあり、常に最後の 2 つの部分が必要な場合は、スクリプトを動的にすることができます。簡単です。

$numberPart = count($explodedUrl);
$redirectUrl = $explodedUrl[$numberPart - 2].'-'.$explodedUrl[$numberPart - 1];

編集:

/ と product_reviews の間のすべてを削除するために、explode を使用できますか?

絶対 !

$explodedUrl = explode('product_reviews-', 'oldnonexistentcategory-actualproduct-product_reviews-actualproduct.htm');
$redirectUrl = $explodedUrl[count($explodedUrl) - 1]; // Get string after "product_reviews-"
echo $redirectUrl; // actualproduct.htm

// So finally :
echo "example.com/product_reviews-".$redirectUrl; // example.com/product_reviews-actualproduct.htm
于 2013-06-17T08:38:29.683 に答える