У меня есть 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-адресе