Htaccess Блокировать все запросы, если запрос не содержит определенных строковых шаблонов

У меня есть веб-сайт Laravel с локализацией, для этого веб-сайта мне нужно разрешить запросы с шаблонами URL, упомянутыми ниже. Если не соответствует этому шаблону URL, необходимо перейти на страницу 404.

https://www.sampledomain.ch/
https://www.sampledomain.ch/some_text/de
https://www.sampledomain.ch/some_text/it
https://www.sampledomain.ch/some_text/fr
https://www.sampledomain.ch/de
https://www.sampledomain.ch/it
https://www.sampledomain.ch/fr

Может ли кто-нибудь помочь мне сделать это с помощью файла htaccess?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1.) С .htaccess

Код с комментариями

# Run this code IF "mod_rewrite" module was enabled
<IfModule mod_rewrite.c>
    # Enable server-side redirects
    RewriteEngine On

    # If the part after the domain is existed (so not just domain)
    #
    # %{REQUEST_URI}: the part after the domain
    # !^/*$: not empty after "/"
    #
    RewriteCond %{REQUEST_URI} !^/*$
    # AND
    # If the part after the domain not end with de, it, or fr
    #
    # %{REQUEST_URI}: the part after the domain
    # !: not
    # /(de|it|fr): /de or /it or /fr
    # $: need end of url after (de or it or fr)
    # [NC]: treats lowercase and uppercase letters equally
    #
    RewriteCond %{REQUEST_URI} !/(de|it|fr)$ [NC]
    # In that case, it returns a 404 error
    RewriteRule ^ - [R=404,L]
</IfModule>

Код

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} !^/*$
    RewriteCond %{REQUEST_URI} !/(de|it|fr)$ [NC]
    RewriteRule ^ - [R=404,L]
</IfModule>

Тестовые случаи

https://www.sampledomain.ch/ # OK (not redirected)
https://www.sampledomain.ch/some_text/de # OK (not redirected)
https://www.sampledomain.ch/some_text/it # OK (not redirected)
https://www.sampledomain.ch/some_text/fr # OK (not redirected)
https://www.sampledomain.ch/some_text/some_text/de # OK (not redirected)
https://www.sampledomain.ch/some_text/some_text/it # OK (not redirected)
https://www.sampledomain.ch/some_text/some_text/fr # OK (not redirected)
https://www.sampledomain.ch/de # OK (not redirected)
https://www.sampledomain.ch/it # OK (not redirected)
https://www.sampledomain.ch/fr # OK (not redirected)

https://www.sampledomain.ch/some_text/DE # OK (not redirected)
https://www.sampledomain.ch/some_text/It # OK (not redirected)
https://www.sampledomain.ch/some_text/rF# OK (not redirected)
https://www.sampledomain.ch/De # OK (not redirected)
https://www.sampledomain.ch/iT # OK (not redirected)
https://www.sampledomain.ch/FR # OK (not redirected)

https://www.sampledomain.ch/FR123 # 404 error
https://www.sampledomain.ch/fr/test # 404 error
https://www.sampledomain.ch/a # 404 error

etc.

2.) Использование Laravel Route (лучший вариант)

Однако, если вы используете Laravel, стоит также пересмотреть использование встроенного роутера!

Однако в примере требуется, чтобы мы переместили код языка в начало URL-адреса, что обычно является обычной практикой.

1. domain2. language3. any other parameters

Route::get('/{language}/{any}', function ($language, $any) {
    // Handle the request in this function.
    // The $language variable contains the language value,
    // and the $any variable contains any part of the URL.
})->where('any', '.*');

Теперь ваша задача — обработать разрешенные языки.

Route::get('/{language}/{any}', function ($language, $any) {
    $allowedLanguages = ['de', 'en', 'fr'];

    if (!in_array(Str::lower($language), $allowedLanguages)) {
        abort(404);
    }

    // If the language is valid, we can continue with the processing.
})->where('any', '.*');

Больше информации здесь: Документация Laravel - Параметры маршрута, закодированные косой чертой

Я попробовал это, когда я вхожу в sampledomain.ch, он перенаправляется на страницу 404.

Asith Abanpola 20.04.2023 06:29

Действительно. Я исправил это. Упомянутый ошибочный URL-адрес также был протестирован!

rozsazoltan 20.04.2023 08:34

Я также добавил решение с Laravel! Я думаю, что результат будет намного более настраиваемым и функциональным, если мы не хотим решать задачу с помощью htaccess!

rozsazoltan 20.04.2023 08:43

Я попробовал новое обновление, и теперь оно работает, но не позволяет загружать изображения, файлы js и css. Поэтому я добавил ниже код RewriteCond %{REQUEST_URI} !\.png$ [NC] RewriteCond %{REQUEST_URI} !\.css$ [NC] RewriteCond %{REQUEST_URI} !\.mp4$ [NC] RewriteCond %{REQUEST_URI} !\.js$ [NC] RewriteCond %{REQUEST_URI} !\.jpg$ [NC] RewriteCond %{REQUEST_URI} !\.jpeg$ [NC] RewriteCond %{REQUEST_URI} !\.ttf$ [NC] RewriteCond %{ REQUEST_URI} !\.svg$ [NC] после этого я смог загрузить эти файлы, но некоторые изображения webp по-прежнему не загружаются.

Asith Abanpola 20.04.2023 20:06

Нужно добавить RewriteCond %{REQUEST_URI} !\.webp$ [NC] --- Я действительно не думал об этом. Хотя отмечу, что с решением Laravel проблемы бы не было!

rozsazoltan 20.04.2023 20:41

Другие вопросы по теме