У меня есть файл index.php на верхнем уровне с другими файлами, такими как «login.php», «register.php» в включенной папке. Иерархия папок выглядит так:
index.php включает/ register.php login.php CSS / style.css изображений/ image.png
Как я могу установить URL-адрес на что-то вроде http://www.mydomain.com/register, который затем изнутри страницы index.php вызывает (включает) страницу register.php?
Это лучший способ сделать это?
благодаря
Майк
Если ваш сервер Apache: создайте в файле корневой папки ".htaccess"
#.htaccess RewriteEngine On Options +FollowSymlinks RewriteRule /register index.php?mode=register
//index.php
<?php if(isset($_GET['mode']=='register')){ include('includes/register.php'); } ?>
в<?php if(isset($_GET['mode']=='register')){ include('includes/register.php'); } ?>
Ну, пока URL-заглушка (т.е. / регистр) всегда будет такой же, как имя файла, которое вы хотите включить, вы можете сделать это с помощью mod_rewrite
Apache.
Однако, если вы хотите изменить заглушку URL-адреса на что-то другое, кроме имени файла, которое вы хотите включить, почему бы не сделать это:
// Get the URL stub: $url_stub = $_SERVER['REQUEST_URI']; define('INCLUDE_PATH', 'includes/'); switch($url_stub) { case 'register': include(INCLUDE_PATH . 'register.php'); break; case 'login': include(INCLUDE_PATH . 'login.php'); break; default: // Output whatever the standard Index file would be here! }
используя mod_rewrite:
RewriteRule ^register index.php?page=register RewriteRule ^login index.php?page=login
index.php:
<?php include('includes/'.$_GET['pagename'].'.php'); ?>
в<?php include('includes/'.$_GET['pagename'].'.php'); ?>
EDIT: Из соображений безопасности см. Также комментарий arnouds ниже.
Вы можете использовать правила перезаписи apache для этого: (поместите это в файл .htaccess в тот же каталог, что и index.php)
RewriteEngine On RewriteRule ^/register$ index.php?page=register
И в index.php:
$pages = scandir('includes'); if (isset($_GET['page'])) { $page = $_GET['page'] . '.php'; if (in_array($page, $pages)) { include $page; } }
Вы можете написать файл .htaccess с чем-то вроде этого:
RewriteEngine On RewriteRule ^([az]+)/?$ /index.php?include=$1 [PT,QSA]
и файл index.php:
include('includes/'.$_GET['include'].'.php');
Конечно, вы можете адаптировать этот код к тому, что вам нужно.