В вашем файле
post.php на входе вы имеете два параметра:
$_GET['id']
и
$_GET['language']
По
$_GET['id']
вы лезете в БД и формируете статью для показа. Вам надо в верхней части
post.php дополнительно сформировать ЧПУ-шную часть URL этой статьи (для этого и используется ваша
seo_replace()), и сравнить его с
$_GET['language']
. Если они совпадают - отдаёте статью, если нет - делаете одно из 2-х:
a) Redirect 301 на правильный $URL, вы его уже сгенерили для сверки с $_GET['language']:
header($_SERVER["SERVER_PROTOCOL"].' 301 Moved Permanently');
header("Location: $URL");
exit;
или
б) Отдаёте 404 страницу:
header($_SERVER["SERVER_PROTOCOL"].' 404 Not Found'); exit;
Что лучше сделать - решайте сами, ибо такое псевдо-ЧПУ это всегда гемор.
- Недруги могут ставить на ваш сайт ссылки вида
/post/4/erotika_bez_sms и по id=4 страница будет показываться. При редиректе такие ссылки приклеятся на статью, а по 404 - нет.
- при простановке внешних ссылок может обрезаться часть ссылки, но по Redirect 301 вы её подберёте, если сохранилась часть
/post/4/.
в догонку
У вас в функции seo_replace() ошибка - используется непроинициированная переменная $finalna_nazwa (там должна стоять $final_name).
Кстати, странное название $finalna_nazwa. Пани разумеет по-польску?