Я сделал 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
Поскольку слеш всегда будет сразу после 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
,
Других решений пока нет …