如果你所有的 URL 都是基于这样的,不要使用 preg_match 而是使用 explode 更快更容易使用:
<?php
// ...
$explodedUrl = explode('-', 'oldnonexistentcategory-actualproduct-product_reviews-actualproduct.htm');
$redirectUrl = $explodedUrl[2].'-'.$explodedUrl[3];
echo $redirectUrl; // product_reviews-actualproduct.htm
但要小心,这假设有两件事:
- 您的 URL 始终基于 4 部分,以“-”分隔:“
string-string-string-string.htm
”
- slug“
string
”的一部分不能有“-”字符(否则,脚本将无法正常工作)。
因此,请确保您的部件中没有带有“-”字符的 slug,而不是那样:old-non-existent-category-actual-product-product-reviews-actual-product.htm
如果您的 URL 可以包含多于或少于 4 个部分,并且您总是想要最后 2 个部分,则可以使您的脚本动态化,这很容易:
$numberPart = count($explodedUrl);
$redirectUrl = $explodedUrl[$numberPart - 2].'-'.$explodedUrl[$numberPart - 1];
编辑:
我可以使用explode 删除/ 和product_reviews 之间的所有内容吗?
绝对地 !
$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