URL重写,PHP模板和$ _GET数组

时间:2011-08-25 11:46:43

标签: php .htaccess mod-rewrite url-rewriting get

我在顶层有一个index.php文件,其中包含名为includes的文件夹中的“login.php”,“register.php”等其他文件。文件夹层次结构如下所示:

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

如何将网址设置为http://www.mydomain.com/register,然后在index.php页面中调用(包括)register.php页面?

这是最好的方法吗?

由于

麦克

5 个答案:

答案 0 :(得分:2)

好吧,只要URL存根(即/ register)总是与您要包含的文件名相同,就可以使用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!
}

答案 1 :(得分:0)

使用mod_rewrite:

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

的index.php:

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

编辑: 出于安全原因,请参阅下面的arnouds评论。

答案 2 :(得分:0)

您可以使用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;
    }
}

答案 3 :(得分:0)

如果您的服务器是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');
} 
?>

答案 4 :(得分:-1)

您可以使用以下内容编写.htaccess文件:

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

和index.php文件:

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

当然,您可以根据需要调整此代码。