Перезапись URL, шаблоны PHP и массив $ _GET - PullRequest
2 голосов
/ 25 августа 2011

У меня есть файл index.php на верхнем уровне с другими файлами, такими как «login.php», «register.php» в папке с именем include.Иерархия папок выглядит следующим образом:

index.php
includes/
    register.php
    login.php
css/
    style.css
images/
    image.png

Как я могу установить URL-адрес, например, http://www.mydomain.com/register, который затем изнутри страницы index.php вызывает (включает) страницу register.php?

Это лучший способ?

Спасибо

Майк

Ответы [ 5 ]

2 голосов
/ 25 августа 2011

Ну, так как заглушка URL (т.е. регистр) всегда будет совпадать с именем файла, который вы хотите включить, вы можете сделать это, используя Apache mod_rewrite.

Однако, если вы хотите изменить заглушку 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!
}
0 голосов
/ 25 августа 2011

Если ваш сервер 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');
} 
?>
0 голосов
/ 25 августа 2011

с использованием mod_rewrite:

RewriteRule ^register index.php?page=register
RewriteRule ^login index.php?page=login

index.php:

<?php
  include('includes/'.$_GET['pagename'].'.php');
?>

EDIT: В целях безопасности см. Также комментарий к arnouds ниже.

0 голосов
/ 25 августа 2011

Вы можете использовать правила переписывания 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;
    }
}
0 голосов
/ 25 августа 2011

Вы можете записать файл .htaccess с чем-то вроде этого:

RewriteEngine On
RewriteRule ^([a-z]+)/?$ /index.php?include=$1 [PT,QSA]

и файл index.php с:

include('includes/'.$_GET['include'].'.php');

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

...