Обрезать часть URL в начале

Есть ссылка https://site.com/ru/moskov/baby/andyushak-evgeniya-petrovna

Нужно ее обрезать чтобы получить baby/andyushak-evgeniya-petrovnа..

Посоветовали вариант

substr(substr($_SERVER['REQUEST_URI'], 1), strpos(substr($_SERVER['REQUEST_URI'], 1), '/') + 1)

он работает, но убирает только https://site.com/ru/

а нужно и после второго слеша убирать


Ответы (2 шт):

Автор решения: adudnik.ru

Если сайт один и тот же и города не меняются (все время речь идет про Москву), то вот так:

$url = "https://site.com/ru/moskov/baby/andyushak-evgeniya-petrovna";
$url = str_replace("https://site.com/ru/moskov/", "", $url);

Этот код просто уберет из ваших ссылок "https://site.com/ru/moskov/" (соответственно вам нужно заменить на своё).

результат: baby/andyushak-evgeniya-petrovna

Если же города меняются и меняются языки, но структура остается такой же, то вот регулярное выражение, которое вырежет вам этот кусок. А именно уберет из ссылки сначала домен http://site.ru/ (как http, так и https) и затем два "контейнера" между слешами. Первый - языковой (/ru/), второй - город (/moskov/).

Данные в них могут меняться, например язык на /en/ а город на /london/.

(https?|http):\/\/\S*?\.\S*?\/\S*?\/\S*?\/

Я в регулярных выражениях на данный момент мягко говоря плаваю, и уверен что от идеала эта регулярное выражение сильно далеко, но с вашей задачей справится.

$url = "https://site.com/ru/moskov/baby/andyushak-evgeniya-petrovna";
$url = preg_replace('#(https?|http):\/\/\S*?\.\S*?\/\S*?\/\S*?\/#', "", $url);

результат: baby/andyushak-evgeniya-petrovna

→ Ссылка
Автор решения: Эдуард

получить baby/andyushak-evgeniya-petrovnа

Если структура URL не меняется, тогда можно обойтись и без регулярных выражений:

  1. разбить URL на массив
  2. взять необходимый срез массива
  3. преобразовать результирующий массив в строку

$str = 'https://site.com/ru/moskov/baby/andyushak-evgeniya-petrovna';

$str = join('/', array_slice(explode('/', $str), 5));

echo $str;

Результат

→ Ссылка