В моем файле .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 /
Если вы делаете это, чтобы избежать получения нескольких ссылок на один и тот же контент, вы можете просто не использовать «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]
: делает условие нечувствительным к регистру, на всякий случай, если вы находитесь в окне окна. [F]
: отправить запрещенный заголовок 403, [L]
: это последнее правило для применения, пропустить все следующие правила перезаписи Правильное переписывание – это искусство само по себе. Я предлагаю вам внимательно прочитать http://httpd.apache.org/docs/2.2/rewrite/ .
Ура,