URL-переписывание, PHP-шаблон и массив $ _GET

У меня есть файл 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'); 

Конечно, вы можете адаптировать этот код к тому, что вам нужно.