htaccess: Как перенаправить на 404 если параметр url отсутствует или недействителен?

Предположим, что на веб-сервере (Apache) имеется следующая структура папок: https://somedomain.com/parentfolder/childfolder .

Используя .htaccess , я хотел бы отобразить дочернюю папку и все ее дочерние папки (файлы, а также папки) только URL-адрес содержит определенный параметр. Например, страница должна отображаться, если ее запрашивает:

https://somedomain.com/parentfolder/childfolder?secretparameter=secretvalue123

Однако, если

  • значение параметра secretparameter не совсем точно secretvalue123 или
  • параметр ] secretparameter отсутствует,

тогда должна быть возвращена ошибка 404.

Есть ли у вас какие-нибудь идеи, как правила .htaccess должны выглядеть для достижения этой цели? Ваша помощь очень признательна, спасибо.

0
задан 27 September 2018 в 02:06
1 ответ

Итак, если строка запроса не является secretparameter = secretvalue123 при запросе ресурса в дочерней папке , то выдайте 404 not found. Вы можете сделать что-то вроде следующего в верхней части файла .htaccess в корне документа, используя mod_rewrite:

RewriteEngine On
RewriteCond %{QUERY_STRING} !=secretparameter=secretvalue123
RewriteRule ^parentfolder/childfolder - [R=404]

Это блокирует запрос, если строка запроса не точно равна secretparameter = secretvalue123 . (Вам не нужен флаг L здесь при указании кода, отличного от 3xx, как это подразумевается.)

Вы можете немного упростить RewriteRule , если вместо этого разместите эти директивы в подкаталоге, который вы хотите защитить. т.е. в /parentfolder/childfolder/.htaccess . Например:

RewriteRule ^ - [R=404]
1
ответ дан 4 December 2019 в 15:50

Теги

Похожие вопросы