предотвратить прямой доступ к URL-адресу в php-файл

У меня есть php-файл, который говорит «check.php» на моем веб-сайте, и он выполняется при отправке формы.

скажем, мой сайт «myweb.com», а файл php находится в каталоге «PHP»,

Я хочу предотвратить прямой доступ к URL-адресу файла «check.php», т.е. если кто-то набирает url « myweb.com/PHP/check.php », тогда файл php не должен быть выполнен, и вместо этого он должен возвращать сообщение об ошибке.

Я пытался предотвратить доступ, установив правило в .htaccess, но он блокирует php, даже когда я пытаюсь отправить форму.

.htaccess правило:

RewriteEngine on RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ (.*)\.php$ /index.html [L] 

Есть ли способ сделать это?

Вы можете сделать это с помощью PHP

 <?php /* at the top of 'check.php' */ if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) { /* Up to you which header to send, some prefer 404 even if the files does exist for security */ header( 'HTTP/1.0 403 Forbidden', TRUE, 403 ); /* choose the appropriate page to redirect users */ die( header( 'location: /error.php' ) ); } ?> 

Попробуйте это в Root / .htaccess:

 RewriteEngine on RewriteCond %{REQUEST_METHOD} !^POST$ RewriteRule ^php/check.php$ - [NC,R=404,L] 

Это вернет 404 не найден, если check.php не получает доступ к методу post-формы.

Поместите этот код в начало check.php:

 if(!isset($_SERVER['HTTP_REFERER'])){ // redirect them to your desired location header('location:../index.php'); exit; } 

Если пользователь обратится к check.php напрямую по URL-адресу, он перенаправит их в нужное место.

Попробуйте это тоже. Прошлое в верхней части check.php

 <?php debug_backtrace() || die ("<h2>Access Denied!</h2> This file is protected and not available to public."); ?> 

Отказ от доступа будет представлен, когда файл имеет доступ непосредственно в URL-адресе