Вопрос по .htaccess, apache, url-rewriting, php – Как остановить прямое выполнение php-страницы с помощью правил htaccess?
В моем файле .htaccess я определил следующее правило, чтобы сделать URL-адрес моей страницы регистрации какhttp://example.com/register/
RewriteRule register/ /register.php
Вышеуказанное правило прекрасно, но я могу получить доступ к своей странице регистрации сhttp://example.com/register/
а также изhttp://example.com/register.php
.
Я не хочу, чтобы пользователь мог получить доступ к URL сhttp://example.com/register.php
URL, есть ли какое-либо ПРАВИЛО, которое я могу определить в .htaccess, чтобы остановить выполнение register.php URL или просто перенаправить любой прямой запрос register.php в / register /
новый rel = каноническая ссылка разобраться в поисковых системах.
Хотя дляthis на тот случай, если вы, вероятно, просто используете редирект 301 из /register.php в / register /
В register.php
if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) )
{
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: /register');
}
$_SERVER['REQUEST_URI']
, SCR, IPT_NAME, по сути, идентиченFILEи, следовательно, тест дает всегда истину.
__file__
Я имел в виду.
вам нужно использоватьстрока запроса, Итак, попробуйте это правило:
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s]
RewriteRule (.+)\.php$ /$1 [L,R=301]
А потом снова ваше правило (в слегка измененном виде):
RewriteRule ^register/$ register.php
чтобы избежать получения нескольких ссылок на один и тот же контент, вы можете просто не использовать & quot; register.php & quot; в любом месте на вашей странице. Я думаю, что ни один поисковик не будет "угадывать" для определенного типа файлов, и если нет проблем с безопасностью, вы на безопасной стороне, потому что, по моему мнению, ни один пользователь не будет ссылаться на этот файл. Однако, если вы хотите быть уверены, просто перенаправьте всю свою функциональность через index.php через одну строку в вашем .htaccess, которая должна быть помещена в ваш каталог www-root:
RewriteEngine on
RewriteRule ^(.*?)$ index.php?file=$1
Затем в вашем index.php вы можете просто выбрать, какую функцию / файл вызывать, разбив и проверив параметр $ _GET [& quot; file & quot;]. Чтобы быть на 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;
Update
Еще одна вещь, которая пришла мне в голову, вы также можете проверить$_SERVER["REQUEST_URI"]
, прикрепил ли пользователь какой-либо & quot; .php & quot; и действовать соответственно, либо полностью отказывая в доступе, либо просто перенаправляя на новое место.
что вы не можете использовать директиву location, но вы можете вставить файл .htaccess в любой каталог.
Просто, если вы вложите это в это, скажите:
Options -Indexes
order allow,deny
deny from all
Вы можете скопировать и вставить этот файл в любой (корневой) каталог, который хотите защитить от внешнего исполнения.
mod_rewrite
используйте вариант ответа SleepyCod:
RewriteCond %{REQUEST_FILENAME} register\.php [NC]
RewriteCond %{IS_SUBREQ} false
RewriteRule .* - [F,L]
Объяснение:
[NC]
: Makes the condition case-insensitive, just in case you're on a windows box.
Condition 1: The requested filename is 'register.php', and
Condition 2: The request is no subrequest (this is important, since every new round through RewriteRules actually creates subrequests).
Rule: essentially do nothing
Flags: [F]
: Send an 403 Forbidden header, [L]
: This is the last rule to apply, skip all following rewrite rules
Правильно переписывать - это искусство само по себе. Предлагаю внимательно прочитатьhttp://httpd.apache.org/docs/2.2/rewrite/.
Ура,