すべての URL がそのように基づいている場合は、preg_match を使用せずに、より高速で使いやすい爆発を使用してください。
<?php
// ...
$explodedUrl = explode('-', 'oldnonexistentcategory-actualproduct-product_reviews-actualproduct.htm');
$redirectUrl = $explodedUrl[2].'-'.$explodedUrl[3];
echo $redirectUrl; // product_reviews-actualproduct.htm
ただし、注意してください。これは、次の 2 つのことを想定しています。
- URL は常に「-」:「」で区切られた 4 つの部分に基づいています
string-string-string-string.htm
。
- スラッグ "
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