2

我有一个 php 脚本处理即将被重定向到 404 的 URL。

如何将 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 而是使用 explode 更快更容易使用:

<?php

// ...

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

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

echo $redirectUrl; // product_reviews-actualproduct.htm

但要小心,这假设有两件事:

  1. 您的 URL 始终基于 4 部分,以“-”分隔:“ string-string-string-string.htm
  2. 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
于 2013-06-17T08:38:29.683 回答