Как остановить прямое выполнение php-страницы с помощью правил htaccess?

В моем файле .htaccess я определил следующее правило, чтобы сделать URL-адрес моей страницы в качестве http://example.com/register/

 RewriteRule register/ /register.php 

Вышеупомянутое правило прекрасно, но я могу получить доступ к моей странице регистрации с http://example.com/register/ а также по http://example.com/register.php .

Я не хочу, чтобы этот пользователь мог получить доступ к URL-адресу с URL-адреса http://example.com/register.php , есть ли какое-либо правило, которое я могу определить в .htaccess, чтобы остановить выполнение URL-адреса register.php или просто перенаправить любой прямой запрос register.php в / register /

Solutions Collecting From Web of "Как остановить прямое выполнение php-страницы с помощью правил htaccess?"

Если вы делаете это, чтобы избежать получения нескольких ссылок на один и тот же контент, вы можете просто не использовать «register.php» в любом месте своей страницы. Я думаю, что никакая поисковая система не «угадает» для определенного типа файла, и если нет проблем с безопасностью, вы находитесь в безопасности, потому что, по-моему, ни один пользователь не будет ссылаться на этот файл. Однако, если вы хотите быть уверенным, что просто перенастройте все свои функции с помощью index.php через одну строку в вашем .htaccess, который должен быть помещен в ваш каталог www-root:

 RewriteEngine on RewriteRule ^(.*?)$ index.php?file=$1 

В вашем index.php вы можете просто выбрать, какую функцию / файл вызывать, разбивая и проверяя параметр $ _GET ["file"]. Чтобы сделать 100% уверенным, никто не может получить доступ к вашему файлу register.php, просто переместите его (и все остальные) в отдельный каталог и включите файл .htaccess со следующей строкой:

 DENY from all 

Есть несколько других вариантов предотвращения прямого доступа. Просто define() переменную где-нибудь в вашем index.php и в верхней части вашего register.php просто введите

 defined('access') or die('Intruder alert!'); 

на вершине. Другой способ может быть честным и просто сказать поисковым системам, что ваш контент был перемещен и что они больше не должны использовать старую ссылку:

 header("Status: 301"); /* Content moved permanently */ header("Location: http://yourserver/Register/"); exit; 

Обновить

Еще одна вещь, которая приходила мне в голову, вы также можете проверить $_SERVER["REQUEST_URI"] , подключил ли пользователь какой-либо «.php» и соответственно действует либо путем полного отказа в доступе, либо просто перенаправления на новое местоположение.

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

Если вы положите это на него, скажите:

 Options -Indexes order allow,deny deny from all 

вы можете скопировать этот файл в любой (корневой) каталог, который вы хотите защитить от внешнего исполнения.

Чтобы проверить начальный URL-адрес URL-адреса, вам необходимо использовать строку запроса . Поэтому попробуйте это правило:

 RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s] RewriteRule (.+)\.php$ /$1 [L,R=301] 

И снова ваше правило (слегка измененным образом):

 RewriteRule ^register/$ register.php 

Попробуй это.

 RewriteCond %{REQUEST_FILENAME} ^register\.php$ [NC] RewriteRule ^/register register.php 

Или это

 Redirect register.php /register 

Игнорируя часть пользовательского опыта, вы можете реализовать новую rel = каноническую ссылку для сортировки поисковых систем.

Хотя для этого случая вы, вероятно, должны просто использовать 301 переадресацию из /register.php в / register /

В register.php

 if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) ) { header ('HTTP/1.1 301 Moved Permanently'); header ('Location: /register'); } 

Если вы хотите полностью заблокировать /register.php с помощью mod_rewrite , используйте вариант ответа SleepyCod:

 RewriteCond %{REQUEST_FILENAME} register\.php [NC] RewriteCond %{IS_SUBREQ} false RewriteRule .* - [F,L] 

Объяснение:

  • [NC] : делает условие нечувствительным к регистру, на всякий случай, если вы находитесь в окне окна.
  • Условие 1: запрошенное имя файла – «register.php» и
  • Условие 2: запрос не является подзапросом (это важно, так как каждый новый раунд через RewriteRules фактически создает подзапросы).
  • Правило: по существу ничего не делать
  • Флаги: [F] : отправить запрещенный заголовок 403, [L] : это последнее правило для применения, пропустить все следующие правила перезаписи

Правильное переписывание – это искусство само по себе. Я предлагаю вам внимательно прочитать http://httpd.apache.org/docs/2.2/rewrite/ .

Ура,