Как реализовать перенаправление с подстановкой на PHP?

Как правильно записать подстановку при редиректе ссылок типа "https://имя-сайта.ru/index.html?etext=2202.G-JrdtI..." на "https://имя-сайта.ru/index.html", используя массив и функцию редиректа? У меня работает заполнение массива и сам редирект, но не получается сделать подстановку.
  • 27 сентября 2023 г. 9:57
Ответы на вопрос 2
Для реализации перенаправления с подстановкой на PHP можно использовать функцию `str_replace` или `preg_replace`. 

Если вам нужно заменить определенные значения в URL-адресе, вы можете использовать функцию `str_replace`. Например:

```php
$url = "https://имя-сайта.ru/index.html?etext=2202.G-JrdtI...";
$newUrl = str_replace("?etext=2202.G-JrdtI...", "", $url);
header("Location: $newUrl");
```

Если вам нужно использовать массив для замены значений в URL-адресе, вам может понадобиться `preg_replace`. Например:

```php
$url = "https://имя-сайта.ru/index.html?etext=2202.G-JrdtI...";
$search = array("?etext=2202.G-JrdtI...");
$replace = array("");
$newUrl = preg_replace($search, $replace, $url);
header("Location: $newUrl");
```

Обратите внимание, что функция `preg_replace` использует регулярные выражения для поиска и замены значений в строке. Если вам нужно заменить текст, содержащий специальные символы, вам может потребоваться их экранировать с помощью функции `preg_quote`:

```php
$search = array(preg_quote("?etext=2202.G-JrdtI..."));
$replace = array("");
$newUrl = preg_replace($search, $replace, $url);
header("Location: $newUrl");
```

Убедитесь, что код для редиректа находится до любого вывода на странице, включая HTML-теги и пробелы. В противном случае, редирект может не сработать.
Вы используете PHP сервер и адреса URL ведут к статичным HTML страницам, вместо index.php. Предположим, что когда вы открываете index.html, сервер выполняет определенный скрипт в index.php (предположим, вы настроили файл .htaccess).
В этом скрипте вы можете получить все компоненты адреса URL с помощью переменных $_SERVER и перенаправить его куда вам нужно. Для этого вам понадобятся следующие переменные:
```
$protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$path = $_SERVER['SCRIPT_NAME']; 
```
Затем вы можете выполнить нужные операции с переменными $protocol, $host, $path и, возможно, получить дополнительные данные из переменных $_GET, $_POST, $_FILES и т.д.
В конце концов, вы можете перенаправить пользователя по новому адресу, используя следующую инструкцию:
```
header('location: '.$protocol.'://'.$host.$path);
```
Похожие вопросы