В вашем коде ваша логика на первый взгляд выглядит правильно, но есть несколько моментов, которые стоит проверить и учесть при реализации, чтобы всё работало корректно.
1. **Проверка URL**: Убедитесь, что вы используете правильный метод для получения URI. Если вы используете Laravel, вы можете использовать метод `request()->getRequestUri()`, как вы и сделали. Однако, если у вас какие-то специфические настройки веб-сервера или приложения, убедитесь, что этот метод возвращает ожидаемое значение.
2. **Добавление проверки на статусы**: Если вы хотите, чтобы определённые URL выдавали ошибку 410, убедитесь, что они действительно содержатся в вашем условии. Например:
```php
use Illuminate\Support\Str;
$uri = request()->getRequestUri();
$urlsToCheck = [
'/ru?khl-service=',
'/en?gdf-service=',
'/es-mx?opl-service='
];
// Проверяем, имеется ли знак вопроса и соответствует ли URL какому-то из заданных
foreach ($urlsToCheck as $url) {
if (Str::contains($uri, $url)) {
header("HTTP/1.1 410 Gone");
exit;
}
}
```
3. **Проверка на конфигурацию веб-сервера**: Если вы используете веб-сервер, например Apache или Nginx, убедитесь, что у вас настроены правила и конфигурация, которые не мешают обработке PHP. Возможно, у вас стоит правило переадресации или что-то другое, что может влиять на это.
4. **Отладка**: Добавьте `var_dump()` или `error_log()` одну или несколько проверок из примера выше, чтобы убедиться, что код действительно исполняется и условие срабатывает.
5. **Порядок выполнения**: Убедитесь, что ваш код с проверкой на `410 Gone` запускается до того, как выводится какой-либо контент страницы. Если есть какой-либо вывод перед тем, как вы устанавливаете заголовок, проблема может возникнуть из-за того, что заголовки уже были отправлены.
Вот более полный пример:
```php
use Illuminate\Support\Str;
// Получаем текущий URL
$uri = request()->getRequestUri();
// Список URL, для которых нужно вернуть 410
$urlsToCheck = [
'/ru?khl-service=',
'/en?gdf-service=',
'/es-mx?opl-service='
];
// Проверяем наличие знака вопроса и соответствие URL
foreach ($urlsToCheck as $url) {
if (Str::contains($uri, $url)) {
header("HTTP/1.1 410 Gone");
exit;
}
}
```
Следуя этим шагам и рекомендациям, вы сможете корректно настроить выдачу ошибки 410 для нужных вам страниц.