.htaccess и фильтрация $ _GET - PullRequest
       16

.htaccess и фильтрация $ _GET

5 голосов
/ 14 октября 2011

Здравствуйте, я пишу сценарий страницы профиля, в этом сценарии я проверяю значение входящей переменной $ _GET и проверяю, что она является целым числом, затем я проверяю это значение по значению $ _SESSION, чтобы подтвердить, что они могут получить доступ толькосвои собственные аккаунты.Код выглядит следующим образом:

// validate $_GET field 
if(isset($_GET['identity']) && filter_var($_GET['identity'], FILTER_VALIDATE_INT, array('min_range' => 1))) {


if(isset($_SESSION['user_identity']) && ((int)$_SESSION['user_identity'] === (int)$_GET['identity'])) { // if session exists and is === $_GET['identity']
// Proceed with code

Это прекрасно работает, например, если я пытаюсь передать '0', '2-2', 'abc' или нет значения в качестве значения $ _GET, запрос корректно завершается неудачейи перенаправляет их на домашнюю страницу.

Затем я попытался изменить файл .htaccess, чтобы сопоставить URL-адреса с именем «profile / 1», чтобы привести его в порядок.

RewriteRule ^profile$ profile.php
RewriteRule ^profile/([0-9]+)$ profile.php?identity=$1 [NC,L]

Теперь я обнаружил, чтостраница больше не перенаправляет, используя указанные выше неверные параметры $ _GET.Он просто пытается найти профиль / abc.

Кто-нибудь знает почему?

1 Ответ

10 голосов
/ 15 октября 2011

Я использую это, и оно работает для меня:

RewriteEngine On
RewriteBase /
RewriteRule ^profile$ profile.php
RewriteRule ^profile/([a-z0-9\-]+)$ profile.php?identity=$1 [NC,L,QSA]

Теперь, как вы получили profile/abc?если вы попытаетесь передать буквы в правиле, оно не будет работать, так как вы указываете только цифры ([0-9]+).Если вы хотите передавать письма, вам нужно будет использовать:

RewriteRule ^profile/([a-z0-9\-]+)/?$ profile.php?identity=$1 [NC,L,QSA]
...