Как я могу использовать URL GET, чтобы определить, имеет ли пользователь доступ к бэкэнду?

Я сделал PHP-фреймворк со своей собственной системой шаблонов, которая работает так, как я хочу, во внешнем интерфейсе. Система шаблонов использует ?url=($page) часть URL-адреса, чтобы выяснить, какую страницу запрашивает пользователь, а затем отображает содержимое файла с именем ($page), Затем я использую htaccess, чтобы «раскрасить» URL.

Тем не менее, я сейчас расширяю рамки, чтобы определить, $_GET['url'] содержит backendи, если это так, посмотрите, есть ли у него косая черта с другой строкой. Например, если значение $_GET['url'] является backend/manage-galleryХочу вернуть страницу manage-gallery из внутренней папки. Вот код, который у меня есть сейчас. В настоящее время я получил его для статического извлечения страницы (index.php), если значение $_GET['url'] это бэкэнд

public function addTpl() {
global $zip;

if(!isset($_GET['url']) || empty($_GET['url'])) {
$_GET['url'] = 'index';
}

$front = '_zip/_templates/_front/'. $zip['Template']['Front'];
$back  = '_zip/_templates/_back/'. $zip['Template']['Back'];

if(strpos($_GET['url'], 'backend') !== false) {
if(file_exists($back . '/')) {
if(file_exists($back . '/index.php')) {
ob_start();
include($back . '/index.php');
$this->tpl .= ob_get_contents();
ob_end_clean();
} else {
if($zip['Template']['Front'] == 'Refresh/multi-page') {
ob_start();
include($back . '/404.php');
$this->tpl .= ob_get_contents();
ob_end_clean();
} else {
die(zipError('File Not Found', 'The file <b>' . secure($_GET['url']) . '</b> could not be found. Please re-check the URL; If you were directed here using a link, please report that link <b><a href="mailto:[email protected]">here<a/>.</b>'));
}
}
} else {
die(zipError('Template Not Found', 'The template <b>' . $zip['Template']['Front'] . '</b> could not be found. Please check your configuration file for a mistake.'));
}
} else {
if(file_exists($front. '/')) {
if(file_exists($front. '/' . secure($_GET['url']) . '.php')) {
ob_start();
include($front. '/' . secure($_GET['url']) . '.php');
$this->tpl .= ob_get_contents();
ob_end_clean();
} else {
if($zip['Template']['Front'] == 'Refresh/multi-page') {
ob_start();
include($front. '/404.php');
$this->tpl .= ob_get_contents();
ob_end_clean();
} else {
die(zipError('File Not Found', 'The file <b>' . secure($_GET['url']) . '</b> could not be found. Please re-check the URL; If you were directed here using a link, please report that link <b><a href="mailto:[email protected]">here<a/>.</b>'));
}
}
} else {
die(zipError('Template Not Found', 'The template <b>' . $zip['Template']['Front'] . '</b> could not be found. Please check your configuration file for a mistake.'));
}
}
}

Как я могу проверить мой код, содержит ли значение get бэкэнд, И посмотреть, есть ли у него наклонный слеш со строкой после него? Вот мой htaccess

RewriteEngine On
RewriteRule ^(|/)$ index.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)(|/)$ index.php?url=$1

0

Решение

Поскольку слеш всегда будет сразу после backend Строка, я бы изменил strpos добавив косую черту:

if(strpos($_GET['url'], 'backend/') !== false) {

Кроме того, если backend происходит в строке, она всегда будет в начале строки, поэтому я бы искал ее в нулевой позиции:

if(strpos($_GET['url'], 'backend/') == 0) {

Тогда я бы использовал && и добавить еще одно условие к этому if оператор для проверки, если длина строки превышает 7 символов. Другими словами, если backend/ находится в начале, а длина строки превышает 7 символов, после backend/,

if(strpos($_GET['url'], 'backend/') == 0 && strlen($_GET['url']) > 7) {

РЕДАКТИРОВАТЬ: есть проблема в вашем .htaccess файл. + Изменить $1 в $2,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]